En vista de las diferentes consultas que nos hacen sobre diferentes temas respecto a la programación, decidimos realizar este formato de preguntas y respuestas.
Estas interrogantes son una colección de las principales preguntas que nos hacen en nuestra comunidad, en este caso vamos a abordar todo lo relacionado con construcción de rest API.
Ya que ha sido una tendencia ahora desarrollar API REST usando json y consumir usando tecnologías front-end como Angular o React existen diferentes interrogantes que se nos presentan a las que daremos respuesta, vamos a ello devs.
1. ¿Qué diferencia existe entre SOAP y Rest?
Bueno, debemos aclarar que ambos son servicios web, que permiten la comunicación entre dos o más sistemas, hasta ahí todo parecen ser muy similares, pero la verdad no.
SOAP y REST no pueden compararse directamente, ya que el primero es un protocolo (o al menos intenta ser) y el segundo es un estilo arquitectónico. Esta es probablemente una de las fuentes de confusión en torno a ella, ya que las personas tienden a llamar a cualquier API REST HTTP que no es SOAP.
SOAP se define como un protocolo estándar de comunicación (conjunto de reglas), un intercambio de mensajes basado en la especificación de XML. SOAP utiliza diferentes protocolos de transporte, tales como HTTP y SMTP . El protocolo HTTP estándar hace que sea más fácil para el modelo de SOAP para túnel a través de cortafuegos y proxys sin ninguna modificación en el protocolo SOAP. SOAP a veces puede ser más lenta que las tecnologías de middleware como CORBA o ICE debido a su formato XML detallado.
REST describe un conjunto de principios de la arquitectura por el cual los datos se pueden transmitir a través de una interfaz estandarizada (como HTTP). REST no contiene una capa adicional de mensajería y se centra en las reglas de diseño para la creación de servicios sin estado. Un cliente puede acceder al recurso mediante el único URI se devuelve y una representación del recurso. Con cada nuevo recurso de la representación, se dice que el cliente para transferir estado. Si bien el acceso a los recursos REST con el protocolo HTTP, el URL del recurso sirve como el identificador de recursos y GET, PUT, DELETE, POST y HEAD son las operaciones HTTP estándar que se deben realizar en ese recurso.
2. ¿Qué beneficios existen de JSON sobre XML?
El análisis JSON es generalmente más rápido que el análisis XML.
Es más fácil trabajar con JSON en algunos lenguajes de programación (Java, javascript, phyton, etc), además que se está convirtiendo en el formato estándar de comunicación de sistemas en la actualidad.
JSON formateado es generalmente más fácil de leer que XML formateado.
JSON puede contener enteros, cadenas, listas, matrices. XML son solo nodos y elementos que deben analizarse en Integer, String, etc., antes de que su aplicación lo use.
3. ¿Qué es un recurso?
Un recurso se define como un objeto que puede ser una imagen, un archivo HTML o datos de texto y que tiene una interpretación en un contexto definido.
4. ¿Cuántos tipos de códigos HTTP existen?
Existen 5 tipos, los cuales son
1xx: Respuestas informativas: Petición recibida, continuando proceso.
2xx: Peticiones correctas: Esta clase de código de estado indica que la petición fue recibida correctamente, entendida y aceptada.
3xx: Redirecciones: El cliente tiene que tomar una acción adicional para completar la petición.
4xx: Errores del cliente: La solicitud contiene sintaxis incorrecta o no puede procesarse en los cuales el cliente parece haber errado la petición.
5xx: Errores de servidor: El servidor falló al completar una solicitud aparentemente válida.
5. ¿Qué protocolo utilizan los servicios web RESTful?
Los servicios web RESTful utilizan el protocolo HTTP como medio de comunicación entre el cliente y el servidor.
6. ¿Cuándo se utiliza el método OPTIONS en las petiociones HTTP?
El método HTTP OPTIONS se utiliza para solicitar información sobre las opciones de comunicación disponibles para el recurso de destino. La respuesta puede incluir un encabezado Permitir que indica métodos HTTP permitidos en el recurso, o varios encabezados Cross Origin Resource Sharing. El método HTTP OPTIONS es seguro e idempotente, ya que está diseñado solo para consultar información sobre formas de interactuar con un recurso.
7. ¿Cuál es el código de retorno de estado HTTP para una declaración DELETE exitosa?
Lo cierto es que no existe una regla estricta con respecto a qué código de estado debe devolver su API REST después de un DELETE exitoso, es decir, puede devolver 200 Ok o 204 Sin contenido. En general, si la operación DELETE es exitosa y el cuerpo de respuesta está vacío, devuelva 204. Si la solicitud DELETE es exitosa y el cuerpo de respuesta NO está vacío, devuelva 200.
Pero existen buenas prácticas de desarrollo y construcción de una rest api, donde se define que un método DELETE debe devolver el código 200 (OK) de proceso realizado correctamente.
8. ¿Cómo se maneja la seguridad de acceso a los diferentes endpoints expuestos en una Rest API?
Al igual que la respuesta anterior no existe una regla estricta respecto a este punto, pero si que existen estanderes de seguridad para este cometido, uno de ellos por ejemplo en el caso de Java con Spring, se tiene el componente spring security que permite definir un servidor de recursos que tiene una regla de accesos permitidos, que cuando no se cumple una autenticación no permite el acceso al recurso solicitado.
9. ¿Debería almacenarse los token de acceso JWT en el servidor o la base de datos?
JWT fue concebido desde el punto de vista de la independencia por lo que no es necesario que se almacene el token de acceso en el servidor ya que el mismo contiene un tiempo de expiración, y que cuando este expira el servidor deniega el recurso solicitado.
Este dato de información en el token va encriptado y la misma se crea a partir de una encriptación única con una llave encriptación que solamente la conoce el servidor, lo cual lo hace muy robusta y actualmente un estándar dentro del protocolo OAuth2.
10. ¿Qué lenguaje de programación es mejor para construir una rest API?
Como en muchos de nuestros artículos afirmamos, para nosotros no existe un lenguaje de programación mejor que otro, cada uno tiene su particularidad y usabilidad dentro del mundo del desarrollo de software, pero sin embargo si que existe lenguajes de programación que tienen mayor escalabilidad en el tiempo, uno de estos lenguajes con el que nosotros trabajos es Java, ya que el mismo se utiliza para construir aplicaciones web, desktop, Android, etc.
Entonces si vamos a elegir un lenguaje de programación no nos fijemos en asumir un bando, sino más bien aprendamos la lógica, los estándares que existen, aprender los diferentes protocolos y que el lenguaje sea algo secundario.