Diferencias entre GraphQL y REST

Comparativa entre dos de los estilos de API más usados hoy en día: cuándo conviene cada uno, sus ventajas, desventajas y ejemplos prácticos con queries y endpoints reales.
API
REST
GraphQL
web
Published

May 21, 2023

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 buen 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.
  • Necesidad de múltiples solicitudes: En algunos casos, los clientes de una API REST pueden requerir datos de múltiples recursos y necesitan realizar múltiples solicitudes para obtener toda la información necesaria.

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
  • Mutations: modifican la data
  • Subscriptions: 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:

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

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

Con este esquema, puedes enviar consultas para obtener información sobre libros:

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

Ventajas de GraphQL

  • Flexibilidad en las consultas: GraphQL permite a los clientes especificar exactamente los datos que necesitan, evitando el problema de las sobre y subconsultas.
  • Menor cantidad de solicitudes: Con GraphQL, los clientes pueden obtener múltiples recursos en una sola solicitud.
  • Evolución de la API sin versiones: GraphQL facilita la evolución de la API sin necesidad de crear múltiples versiones.

Desventajas de GraphQL

  • Mayor complejidad inicial: Su implementación inicial puede requerir más tiempo y esfuerzo debido a su curva de aprendizaje.
  • Rendimiento en consultas complejas: Puede experimentar un rendimiento inferior en consultas que involucran múltiples relaciones y operaciones de agregación.
  • Caching no trivial: Aplicar técnicas de caching no es tan directo como en REST.

Conclusión

La elección entre REST y GraphQL depende de las necesidades específicas de tu proyecto.

  • Usa REST cuando busques simplicidad y compatibilidad con herramientas existentes. Ideal para operaciones predecibles y recursos bien definidos.
  • Usa GraphQL cuando necesites mayor flexibilidad en las consultas y quieras minimizar la sobrecarga de múltiples solicitudes. Especialmente útil en aplicaciones con requisitos complejos de recuperación de datos.

Referencias