¿Cuál es la diferencia entre GraphQL y REST?

GraphQL y REST son dos enfoques distintos para diseñar una API para el intercambio de datos a través de Internet. REST permite a las aplicaciones cliente intercambiar datos con un servidor mediante verbos HTTP, que es el protocolo de comunicación estándar de Internet. Por otro lado, GraphQL es un lenguaje de consulta de API que define las especificaciones relativas a cómo una aplicación cliente debe solicitar datos de un servidor remoto. Puede usar GraphQL en sus llamadas a la API sin depender de la aplicación del lado del servidor para definir la solicitud. Tanto GraphQL como REST son tecnologías eficaces que están detrás de la mayoría de nuestras aplicaciones modernas.

Más información sobre REST »

Más información sobre la implementación de GraphQL »

¿Cuáles son las similitudes entre GraphQL y REST?

Tanto GraphQL como REST son estilos de arquitectura de API populares que permiten el intercambio de datos entre diferentes servicios o aplicaciones en un modelo cliente-servidor.

Las API facilitan el acceso a los datos y las operaciones de datos de la siguiente manera:

  1. Un cliente envía una solicitud de API a uno o varios puntos de conexión de un servidor.
  2. El servidor proporciona una respuesta que contiene datos, el estado de los datos o códigos de error.

REST y GraphQL permiten crear, modificar, actualizar y eliminar datos en una aplicación, servicio o módulo independiente a través de la API. Las API desarrolladas con REST se conocen como API de RESTful o API de REST. Las que se desarrollan con GraphQL son simplemente API de GraphQL.

Los equipos de frontend y backend utilizan estas arquitecturas de API para crear aplicaciones modulares y accesibles. El uso de una arquitectura de API ayuda a mantener la seguridad, la modularidad y la escalabilidad de los sistemas. También hace que los sistemas sean más eficientes y fáciles de integrar con otros sistemas.

A continuación, analizamos más similitudes entre GraphQL y REST.

Más información sobre las API »

Arquitectura

Tanto REST como GraphQL implementan varios principios arquitectónicos de API habituales. Por ejemplo, estos son los principios que comparten:

  • No tienen estado, por lo que el servidor no guarda el historial de respuestas entre las solicitudes.
  • Utilizan un modelo cliente-servidor, por lo que las solicitudes de un solo cliente dan como resultado respuestas de un solo servidor.
  • Se basan en HTTP, ya que HTTP es el protocolo de comunicación subyacente.

Diseño basado en recursos

Tanto REST como GraphQL diseñan su intercambio de datos en torno a los recursos. Un recurso hace referencia a cualquier dato u objeto al que el cliente puede acceder y manipular a través de la API. Cada recurso tiene su propio identificador único (URI) y un conjunto de operaciones (métodos HTTP) que el cliente puede realizar en él.

Por ejemplo, imagínese una API de redes sociales en la que los usuarios crean y administran publicaciones. En una API basada en recursos, una publicación sería un recurso. Tiene su propio identificador único como, por ejemplo, /posts/1234. Además, tiene un conjunto de operaciones, como GET para recuperar la publicación en REST o query para recuperar la publicación en GraphQL.

Intercambio de datos

Tanto REST como GraphQL admiten formatos de datos similares.

JSON es el formato de intercambio de datos más popular que todos los lenguajes, plataformas y sistemas entienden. El servidor devuelve los datos en formato JSON al cliente. Hay otros formatos de datos disponibles, pero se utilizan con menos frecuencia, como XML y HTML.

Del mismo modo, REST y GraphQL admiten el almacenamiento en caché. Por lo tanto, los clientes y los servidores pueden almacenar en caché los datos a los que se accede con frecuencia para aumentar la velocidad de la comunicación.

Más información sobre JSON »

Neutralidad del lenguaje y la base de datos

Tanto las API de GraphQL como las de REST funcionan con cualquier estructura de base de datos y cualquier lenguaje de programación, tanto del cliente como del servidor. Esto hace que tengan un alto nivel de interoperabilidad con cualquier aplicación.

¿Qué limitaciones de REST intenta superar GraphQL?

GraphQL surgió en 2012 como respuesta a la necesidad de velocidad en las plataformas de redes sociales emergentes. Los desarrolladores descubrieron que las arquitecturas de API existentes, como REST, eran demasiado largas y estructuradas para producir fuentes de noticias de manera eficiente.

A continuación, analizamos algunos de los desafíos a los que se enfrentaron.

Intercambio de datos de estructura fija

La API de REST requiere que las solicitudes de los clientes sigan una estructura fija para recibir un recurso. Esta estructura rígida es fácil de usar, pero no siempre es el medio más eficiente para intercambiar exactamente los datos necesarios.

Exceso e insuficiencia de datos

Las API de REST siempre devuelven un conjunto de datos completo. Por ejemplo, de un objeto de persona de la API de REST recibirá el nombre, la fecha de nacimiento, la dirección y el número de teléfono de la persona. Recibirá todos estos datos incluso si solo necesita un número de teléfono.

Del mismo modo, si desea saber el número de teléfono de una persona y su última compra, deberá realizar varias solicitudes a la API de REST. La URL /person devolverá el número de teléfono y la URL /purchase devolverá el historial de compras.

Los desarrolladores de redes sociales tuvieron que escribir mucho código solo para procesar las solicitudes de API, lo que afectó al rendimiento y a la experiencia del usuario.

GraphQL surgió como una solución basada en consultas. Las consultas pueden devolver los datos exactos en un solo intercambio de solicitudes y respuestas de API.

Diferencias clave: comparación entre GraphQL y REST

Una API de REST es un concepto arquitectónico para la comunicación de aplicaciones. Por otro lado, GraphQL es una especificación, un lenguaje de consulta de API y un conjunto de herramientas. GraphQL funciona en un único punto de conexión mediante HTTP.

Además, el desarrollo de REST se ha centrado más en crear nuevas API. Por su parte, GraphQL se ha centrado en el rendimiento y la flexibilidad de las API.

A continuación exponemos algunas diferencias más.

Solicitud del cliente

Esto es lo que utiliza una solicitud de REST para funcionar: 

  • Verbos HTTP que determinan la acción.
  • Una URL que identifica el recurso en el que se realizará una acción con un verbo HTTP.
  • Parámetros y valores para analizar, si desea crear o modificar un objeto en un recurso existente del servidor.

Por ejemplo, use GET para obtener datos de solo lectura de un recurso, POST para agregar una nueva entrada de recurso o PUT para actualizar un recurso.

Por el contrario, esto es lo que usan las solicitudes de GraphQL:

  • Consulta para obtener datos de solo lectura.
  • Mutación para modificar datos.
  • Suscripción para recibir actualizaciones de datos de streaming o basadas en eventos.

Un formato de datos describe cómo desea que el servidor devuelva los datos, incluidos los objetos y campos que coinciden con el esquema del servidor. También puede introducir datos nuevos. Internamente, GraphQL envía cada solicitud de cliente como una solicitud HTTP POST.

Datos devueltos al cliente

En la arquitectura de REST, los datos se devuelven al cliente desde el servidor en la estructura completa del recurso especificada por el servidor. En los ejemplos siguientes se muestran los datos devueltos en REST y GraphQL.

Ejemplo de datos devueltos en REST

En REST, GET /posts devuelve lo siguiente:

[

  {

    "id": 1,

    "title": "Primera publicación",

    "content": "Este es el contenido de la primera publicación."

  },

  {

    "id": 2,

    "title": "Segunda publicación",

    "content": "Este es el contenido de la segunda publicación."

  },

  {

    "id": 3,

    "title": "Tercera publicación",

    "content": "Este es el contenido de la tercera publicación."

  }

]

Ejemplo de datos devueltos en GraphQL

Cuando usa GraphQL, solo se devuelven los datos especificados en la estructura proporcionada por el cliente.

GET /graphql?query{post(id: 1) {id title content}} devuelve solo la primera publicación:

{

  "data": {

    "posts": [

      {

        "id": "1",

        "title": "Primera publicación",

        "content": "Este es el contenido de la primera publicación."

      },

]}}

Esquema del servidor

GraphQL usa un esquema del servidor para definir los datos y los servicios de datos, a diferencia de una API de REST.

El esquema, escrito en el lenguaje de definición de esquemas de GraphQL, incluye detalles como los siguientes:

  • Tipos de objetos y campos que pertenecen a cada objeto.
  • Funciones de solucionador del servidor que definen una operación para cada campo.

El esquema define explícitamente los tipos para describir todos los datos disponibles en el sistema y cómo los clientes pueden acceder a esos datos o modificarlos. 

Por otro lado, las API de REST no requieren un esquema del servidor. Sin embargo, puede definirlo opcionalmente para lograr un diseño de API, una documentación y un desarrollo de cliente eficientes. 

Control de versiones

A medida que las API evolucionan, sus estructuras de datos y sus operaciones pueden cambiar. Para los clientes que no tengan conocimiento de estos cambios, esto puede dañar sus sistemas o introducir errores desconocidos.

Las API de REST suelen incluir el control de versiones en la URL para resolver este problema, como https://example.com/api/v1/person/12341. Sin embargo, el control de versiones no es obligatorio y puede provocar errores. 

GraphQL requiere compatibilidad con versiones anteriores de la API. Por lo tanto, los campos eliminados devuelven un mensaje de error y los que tienen una etiqueta obsoleta devuelven una advertencia.

Administración de errores

GraphQL es una arquitectura de API con establecimiento inflexible de tipos, lo que significa que requiere una descripción detallada de los datos, su estructura y las operaciones de los datos en el esquema. Gracias al nivel de detalle del esquema, el sistema puede identificar automáticamente los errores de las solicitudes y proporcionar mensajes de error útiles. 

El establecimiento de tipos de las API de REST es flexible y se debe integrar la administración de errores en el código adyacente. Por ejemplo, si una solicitud PUT analiza un valor numérico como texto en lugar de como un entero, el sistema no identifica el error automáticamente.

Comparación entre el uso de GraphQL y REST

Puede usar las API de GraphQL y de REST de forma intercambiable. Sin embargo, hay algunos casos de uso en los que una u otra es más adecuada.

Por ejemplo, es probable que GraphQL sea una mejor opción si tiene estas consideraciones:

  • Tiene un ancho de banda limitado y desea minimizar la cantidad de solicitudes y respuestas.
  • Tiene varios orígenes de datos y desea combinarlos en un punto de conexión.
  • Las solicitudes de los clientes varían significativamente y espera respuestas muy diferentes.

 

Por otro lado, es probable que REST sea una mejor opción si tiene estas consideraciones:

  • Tiene aplicaciones más pequeñas con datos menos complejos.
  • Tiene datos y operaciones que todos los clientes utilizan de manera similar.
  • No tiene requisitos para realizar consultas de datos complejas.

 

También es posible crear una sola aplicación con las API de GraphQL y las API de REST para diferentes áreas de funcionalidad.

Cómo usar GraphQL y REST en la misma API

Es posible actualizar una API de RESTful a una API de GraphQL sin realizar una reescritura completa.

A continuación se muestra un resumen del proceso:

  1. Comprenda el modelo de datos de la API de RESTful. Para ello, examine la forma de los datos de cada recurso de URL.
  2. Escriba el esquema de GraphQL a partir del modelo de datos.
  3. Determine qué operaciones realizan los clientes con los datos e inclúyalas en el esquema.
  4. Cree una función de solucionador en el código del servidor para cada campo del esquema.
  5. Cree un servidor GraphQL con los solucionadores y el esquema.

Después de esto, los clientes se podrán comunicar con su API mediante GraphQL o REST.

Más información sobre cómo crear solucionadores de GraphQL »

Resumen de las diferencias: REST en comparación con GraphQL

 

REST

GraphQL

¿Qué es?

REST es un conjunto de reglas que define el intercambio de datos estructurados entre un cliente y un servidor.

GraphQL es un lenguaje de consulta, un estilo de arquitectura y un conjunto de herramientas para crear y manipular las API.

Más adecuada para lo siguiente:

REST va bien para orígenes de datos simples donde los recursos están bien definidos.

GraphQL es ideal para orígenes de datos grandes, complejos e interrelacionados.

Acceso a los datos

REST tiene varios puntos de conexión en forma de URL para definir los recursos.

GraphQL tiene un único punto de conexión de URL.

Datos devueltos

REST devuelve los datos en una estructura fija definida por el servidor.

GraphQL devuelve los datos en una estructura flexible definida por el cliente.

Cómo se estructuran y definen los datos

Los datos de REST son de tipado débil. Por lo tanto, el cliente debe decidir cómo interpretar los datos formateados cuando se devuelvan.

Los datos de GraphQL son de tipado fuerte. De este modo, el cliente recibe los datos en formatos predeterminados y mutuamente comprendidos.

Comprobación de errores

Con REST, el cliente debe comprobar si los datos devueltos son válidos.

Con GraphQL, las solicitudes no válidas suelen ser rechazadas por la estructura del esquema. Esto da lugar a un mensaje de error autogenerado.

¿Cómo puede AWS cumplir con sus requisitos de GraphQL y REST?

Amazon Web Services (AWS) lo ayuda a crear y ofrecer las API mejor administradas.

AWS AppSync crea API GraphQL y de publicación y suscripción (pub/sub) sin servidor. Simplifican el desarrollo de aplicaciones mediante un único punto de conexión para consultar, actualizar o publicar datos de forma segura.

Con AWS AppSync, puede crear API que permitan a los clientes hacer lo siguiente:

  • Interactuar con múltiples orígenes de datos, como SQL, NoSQL, datos de búsqueda, puntos de conexión de REST y microservicios, con una sola llamada de red.
  • Sincronizar automáticamente los datos entre las aplicaciones móviles y web y la nube.
  • Transmitir datos desde el backend a los clientes conectados, así como entre ellos.
  • Acceder a los datos de Internet de las cosas (IoT) para crear paneles en tiempo real en una aplicación móvil o web.

De manera similar, Amazon API Gateway es un servicio totalmente administrado que le facilita la creación, la publicación, el mantenimiento, la supervisión y la protección de las API a cualquier escala.

Estas son las formas en las que puede beneficiarse del uso de API Gateway:

  • Proporcionar a los usuarios rendimiento de alta velocidad tanto para las solicitudes como para las respuestas de las API.
  • Autorizar el acceso a sus API.
  • Ejecutar varias versiones de la misma API simultáneamente para iterar, probar y lanzar nuevas versiones con rapidez.
  • Supervisar las métricas de rendimiento y la información sobre las llamadas a la API, la latencia de los datos y los índices de error.

Para comenzar a utilizar GraphQL y REST en AWS, cree una cuenta hoy mismo.

Siguientes pasos con AWS

Comience a crear con GraphQL

Descubra cómo empezar a utilizar GraphQL en AWS

Más información 
Comience a crear con REST

Descubra cómo empezar a utilizar REST en AWS

Más información