REST

Una API de REST, o API de RESTful, es una interfaz de programación de aplicaciones (API o API web) que se ajusta a los límites de la arquitectura REST y permite la interacción con los servicios web de RESTful.

REST no es un protocolo ni un estándar, sino más bien un conjunto de límites de arquitectura. La diferencia entre la palabra REST y RESTful, es que RESTful hace referencia a un servicio web que implementa la arquitectura REST.

Conceptos claves:

  • Recursos(resources) el cual cada uno tiene un identificador único llamado URI (identificador de recursos uniforme)
  • Métodos(methods) HTTP como GET, POST, PUT, DELETE se utilizan para realizar operaciones sobre los recursos identificados por la URI.

Ejemplo

Algunos ejemplos simples de solicitudes RESTful utilizando diferentes métodos HTTP:

  • Obtener una lista de usuarios:

    GET /users

  • Obtener los detalles de un usuario específico:

    GET /users/{id}

  • Crear un nuevo usuario:

POST /users
Content-Type: application/json

{
  "name": "John Doe",
  "email": "johndoe@example.com"
}
  • Actualizar los detalles de un usuario existente:
PUT /users/{id}
Content-Type: application/json

{
  "name": "Jane Smith",
  "email": "janesmith@example.com"
}
  • Eliminar un usuario específico:

    DELETE /users/{id}

Ventajas

  • Adoptado por gran parte de la industria.
  • Quien diseña la API define como se incluyen los recursos.
  • No necesita librerías, con un simple curl o navegador web ya funciona.
  • Muy bueno soporte para caching por parte de los navegadores, CDN y proxies.

Desventajas

  • Sobre y subconsulta de datos: En las API REST, a menudo se produce el problema de sobreconsulta o subconsulta de datos. Esto significa que los clientes pueden recibir más o menos datos de los que necesitan, lo que puede resultar en una mayor carga de red o en una falta de datos necesarios.
  • Necesidad de múltiples solicitudes: En algunos casos, los clientes de una API REST pueden requerir datos de múltiples recursos y, por lo tanto, necesitan realizar múltiples solicitudes para obtener toda la información necesaria. Esto puede conducir a una mayor latencia y un mayor tráfico de red en comparación con GraphQL.

GraphQL

GraphQL es un lenguaje de consulta y manipulación de datos que se utiliza para solicitar y recibir datos de un servidor, fue desarrollado por Meta.

Conceptos claves:

  • Schema: datos que pueden utilizar nuestros clientes
  • Query: consulta de datos que sigue la estructura definida en el esquema
  • Resolvers: lógica para recuperar los datos solicitados en la query, ej. ir a una db o múltiples fuentes de datos
  • Mutations: modifican la data
  • Suscriptions: mecanismo para notificar a los clientes sobre cambios en los datos.

Ejemplo

Supongamos que estás construyendo una aplicación de libros y quieres tener un esquema GraphQL para obtener información sobre los libros. Tu esquema GraphQL podría tener la siguiente estructura:

type Libro {
  id: ID
  titulo: String
  autor: String
  genero: String
}

type Query {
  libro(id: ID!): Libro
  libros: [Libro]
}

En este ejemplo, hemos definido dos tipos: Libro y Query.

El tipo Libro tiene cuatro campos: id, titulo, autor y genero. Cada campo tiene un tipo de datos asociado, como ID para el ID del libro y String para el título, el autor y el género del libro.

El tipo Query define las operaciones de consulta que se pueden realizar en el esquema. Hemos definido dos operaciones de consulta:

  • libro(id: ID!): Libro: Permite obtener un libro específico proporcionando un ID como argumento. Devuelve un objeto de tipo Libro.

  • libros: [Libro]: Permite obtener todos los libros disponibles. Devuelve una lista de objetos de tipo Libro.

Con este esquema, puedes enviar consultas GraphQL para obtener información sobre libros. Por ejemplo, si quisieras obtener un libro específico con el ID “123”, podrías enviar la siguiente consulta:

query {
  libro(id: "123") {
    titulo
    autor
    genero
  }
}

El servidor GraphQL procesaría esta consulta y te devolvería el título, el autor y el género del libro con el ID “123”.

Este es solo un ejemplo básico de un esquema GraphQL. En aplicaciones más complejas, el esquema puede tener múltiples tipos, relaciones entre ellos y operaciones de mutación para modificar los datos.

Ventajas de GraphQL:

  • Flexibilidad en las consultas: GraphQL permite a los clientes especificar exactamente los datos que necesitan, lo que evita el problema de las sobre y subconsultas presentes en REST. Esto proporciona una mayor eficiencia al reducir la cantidad de datos innecesarios enviados en una respuesta.
  • Menor cantidad de solicitudes: Con GraphQL, los clientes pueden obtener múltiples recursos en una sola solicitud, ya que pueden especificar sus requerimientos en la consulta. Esto puede resultar en un menor número de solicitudes en comparación con REST, lo que mejora la eficiencia y reduce la carga en el servidor.
  • Evolución de la API sin versiones: GraphQL facilita la evolución de la API sin necesidad de crear múltiples versiones, ya que los clientes pueden solicitar solo los campos que necesitan. Esto da lugar a una mayor flexibilidad y facilita la introducción de cambios en el esquema de la API sin romper las implementaciones existentes.

Desventajas de GraphQL:

  • Mayor complejidad inicial: Aunque GraphQL ofrece beneficios significativos, su implementación inicial puede requerir más tiempo y esfuerzo debido a su curva de aprendizaje y la necesidad de establecer un servidor GraphQL.
  • Rendimiento en consultas complejas: Aunque GraphQL es eficiente en consultas específicas y reduce el exceso de datos, puede experimentar un rendimiento inferior en consultas complejas que involucran múltiples relaciones y operaciones de agregación. En tales casos, el modelado y la optimización de consultas pueden resultar más desafiantes en GraphQL que en REST.
  • Posibles problemas de rendimiento: Si no se maneja correctamente, GraphQL puede enfrentar problemas de rendimiento. Si los clientes solicitan una gran cantidad de datos relacionados en una sola consulta, puede generar una carga significativa en el servidor y afectar la velocidad de respuesta. Es importante optimizar y ajustar adecuadamente las consultas para evitar problemas de rendimiento.
  • Aplicar tecnicas de caching no es trivial.

Conclusion

En resumen, la elección entre REST y GraphQL depende de las necesidades específicas de tu proyecto y de las características de tu sistema.

Utiliza REST cuando busques simplicidad y compatibilidad con herramientas y bibliotecas existentes. REST es ideal para casos en los que las operaciones son predecibles, los recursos se modelan bien como entidades y se requiere un enfoque más simple y estándar para la comunicación entre cliente y servidor.

Utiliza GraphQL cuando necesites una mayor flexibilidad en las consultas de datos y quieras minimizar la sobrecarga de múltiples solicitudes. GraphQL es especialmente útil en aplicaciones con requisitos complejos de recuperación de datos, donde los clientes pueden especificar exactamente los datos que necesitan y reducir la cantidad de transferencia de datos innecesarios.

Recuerda que ambos enfoques tienen ventajas y desventajas, y la elección dependerá de los requisitos específicos de tu proyecto, el equipo de desarrollo y la infraestructura existente. También es posible combinar ambos enfoques en un sistema híbrido si así lo requiere tu situación.

Referencias

Share on: TwitterFacebookEmail

Comments

comments powered by Disqus

Published

Category

web

Tags

Contact