GraphQL vs REST: todo lo que necesita saber

Publicado: 2022-09-20

Puede ser difícil elegir las tecnologías que se incluirán en la pila tecnológica de su próximo proyecto. En muchos casos, y especialmente cuando se trata de elegir entre API GraphQL y RESTful, se trata de elegir la siguiente mejor arquitectura de diseño de API.

Hay cuatro formas importantes de crear API: SOAP, GRPC, REST y GraphQL. A menudo limitamos nuestras mentes a REST y GraphQL cuando queremos crear API. Esto se debe a que REST cambió las formas tradicionales de crear API con SOAP y GRPC.

GraphQL está ampliamente etiquetado como un mejor REST porque representa una mejor forma de crear API. Muchos desarrolladores creen que GraphQL reemplazará a REST. Muchos más ya han descubierto que GraphQL ayuda a resolver algunos desafíos comunes que enfrentan los desarrolladores al crear API REST.

Aprende cómo elegir la mejor arquitectura y patrón de diseño de API para tu proyecto en esta guía Haz clic para twittear

Estos dos métodos de creación de API son completamente diferentes. En la práctica, estas tecnologías funcionan enviando una solicitud HTTP y recibiendo el resultado. Ambos tienen sus pros y sus contras, y en este artículo analizaremos en detalle estas dos grandes tecnologías que han cambiado la forma en que desarrollamos y escalamos las API.

Sin embargo, antes de profundizar en los detalles, primero exploremos el significado de GraphQL y las API RESTful.

¿Qué es GraphQL?

GraphQL es un lenguaje de consulta de API, así como un tiempo de ejecución para responder esas consultas con datos existentes. También viene equipado con poderosas herramientas para manejar incluso las consultas más complejas.

La característica central de GraphQL es su capacidad para solicitar y recibir solo los datos específicos solicitados, nada más. Esto hace que sea mucho más sencillo escalar sus API junto con su aplicación.

La parte más emocionante de GraphQL es su capacidad para proporcionarle todos los datos en un punto final.

Una captura de pantalla de un diagrama de flujo de la arquitectura API de GraphQL.
Arquitectura API de GraphQL.

El diagrama anterior es una representación típica de la arquitectura GraphQL. Los clientes realizan solicitudes desde diferentes dispositivos, y GraphQL maneja sus solicitudes y devuelve solo los datos solicitados. Esto resuelve perfectamente el problema de la obtención excesiva y la obtención insuficiente en las API RESTful.

Una captura de pantalla de un área de juegos de GraphQL que muestra una consulta exitosa.
Una consulta exitosa en un patio de recreo de GraphQL.

En el ejemplo anterior, mostramos un área de juegos de GraphQL y cómo puede consultar datos con un solo punto final. En la parte superior está el punto final de la API, a la izquierda está la consulta que solicita los nombres de los continentes y, por último, a la derecha, respondemos a la consulta que solicitamos.

GraphQL fue creado por Facebook con el objetivo principal de resolver la experiencia del desarrollador de su aplicación móvil mientras trabaja con API REST. Desde que se lanzó su primera versión de código abierto en 2015, GraphQL ha experimentado un enorme crecimiento debido a la adopción de la tecnología por parte de los grandes actores del negocio tecnológico.

Empresas que usan GraphQL

A continuación se muestra una lista de algunas de las empresas y aplicaciones que utilizan GraphQL activamente en sus servidores.

Facebook

Facebook creó GraphQL y lo han utilizado en producción para potenciar sus aplicaciones móviles desde 2012. La multimillonaria empresa de redes sociales abrió la especificación de GraphQL en 2015, haciéndola accesible en muchos entornos y para equipos de todos los tamaños. .

Una captura de pantalla de la página de inicio de sesión de Facebook.
Facebook usa GraphQL.

GitHub

GitHub también anuncia el uso de GraphQL al proporcionar una API de GraphQL para crear integraciones, recuperar datos y automatizar sus flujos de trabajo utilizando la API de GitHub GraphQL. La API GitHub GraphQL ofrece consultas más precisas y flexibles que la API REST de GitHub.

Una captura de pantalla de la página de inicio de GitHub.
GitHub también utiliza GraphQL.

Pinterest

Pinterest también es uno de los primeros en adoptar GraphQL. El gigante del intercambio de fotografías ha discutido públicamente su exploración inicial de GraphQL y cómo utilizan la tecnología GraphQL que impulsa a su empresa multimillonaria.

Una captura de pantalla de la página de inicio de Pinterest.
Pinterest también usa GraphQL para su sitio.

Muchas otras empresas multimillonarias como Intuit, Shopify, Coursera y Airbnb potencian sus aplicaciones con GraphQL. Y esta preferencia de amplio alcance por REST sigue creciendo.

¿Qué es la API RESTful?

REST significa "Transferencia de estado representacional", que es un estilo de arquitectura de software para sistemas hipermedia distribuidos. Define principios y restricciones para el intercambio de recursos entre el servidor y los clientes.

Si se siguen estos principios en una API, la aplicación de esa API se denomina "RESTful". La API REST de WordPress es un excelente ejemplo de esto.

A continuación, se muestran algunos de los principios y restricciones que debe cumplir una API para ser denominada API Restful:

  • Desacoplamiento cliente-servidor: los clientes (frontend) y el servidor (backend) están completamente separados y solo pueden comunicarse a través de los puntos finales.
  • Interfaz uniforme: los datos que se ven en la interfaz son idénticos en todos los dispositivos.
  • Apatridia: El servidor no recuerda si la solicitud actual se está realizando por primera vez o no. Cada vez que se realiza una solicitud, debe incluir toda la información necesaria para procesarla desde cero.
  • Capacidad de almacenamiento en caché : se permite el almacenamiento en caché y de sesiones, pero deben configurarse para permitir que los usuarios finales opten por el almacenamiento en caché de datos.
  • Arquitectura del sistema en capas: las API deben diseñarse de modo que ni el cliente ni el servidor puedan saber si se están comunicando directamente oa través de un intermediario.

El siguiente diagrama es de la arquitectura REST básica. Muestra cómo se manejan normalmente las solicitudes y las respuestas.

Una captura de pantalla que muestra un gráfico de rama de la arquitectura de la API RESTful.
Arquitectura API REST.

Beneficios de GraphQL

A continuación se presentan algunos beneficios de usar GraphQL, que ilustran por qué es más que suficiente para crear la próxima aplicación de mil millones de dólares.

Obtención de datos a través de un único punto final de API

La principal ventaja de GraphQL es su capacidad para acceder a cualquiera o todos los puntos de datos a través de un único punto final de API.

Uno de los problemas más comunes con las API RESTful es tener demasiados puntos finales para acceder a la información. En GraphQL, solo tiene un único punto final, por lo que no necesita enviar varias solicitudes para recuperar información diferente sobre un objeto.

El siguiente diagrama muestra un claro ejemplo de recuperación de recursos mediante RESTful API y GraphQL. Puede ver que solo hay un punto final para acceder al recurso en el servidor GraphQL, mientras que se necesitan varios puntos finales de API para acceder a diferentes recursos en la API RESTful.

Un diagrama de flujo que muestra múltiples consultas en RESTful API y cómo se manejan en GraphQL.
Puntos finales de API en REST y GraphQL.

Sin sobre-buscar o sub-buscar

El problema de la búsqueda excesiva o insuficiente es un problema conocido con las API RESTful. Esto es cuando los clientes descargan datos al llegar a puntos finales que devuelven estructuras de datos fijas, o bien recuperan más o menos de lo que esperaban.

La obtención excesiva da como resultado que la solicitud reciba, o "obtenga", más datos de los que requiere una solicitud determinada. Imagine que está buscando a todos los usuarios en una tabla con la intención de mostrar sus nombres de usuario en su página de inicio. En ese caso, la obtención excesiva devolverá todos los datos de cada usuario, incluido (pero no solo) el nombre.

La búsqueda insuficiente es comparativamente rara, pero ocurre cuando el punto final específico no proporciona toda la información solicitada. El cliente deberá realizar solicitudes adicionales para acceder a la otra información según sea necesario.

GraphQL resuelve de manera eficiente el problema de la obtención excesiva o insuficiente al tomar el recurso exacto que el cliente solicitó sin detalles adicionales.

Mejor manejo de sistemas complejos y microservicios

GraphQL puede unificar y ocultar la complejidad de múltiples sistemas integrados.

Por ejemplo, digamos que queremos migrar de una aplicación de back-end monolítica a una arquitectura de microservicio. La API GraphQL ayuda a manejar la comunicación entre varios microservicios al fusionarlos en un esquema GraphQL.

Una vez que se definen estos esquemas, tanto el frontend como el backend pueden comunicarse por separado sin más cambios, ya que el frontend sabe que los datos en el esquema siempre estarán sincronizados en todo el sistema.

Rápido y Seguro

El problema de la obtención excesiva puede resultar en un mayor consumo de ancho de banda para los clientes, lo que puede, con el tiempo, causar retrasos en su aplicación. El uso de patrones de diseño de API RESTful requiere más tiempo para clasificar la información necesaria de una enorme carga útil.

Debido a la capacidad de GraphQL para evitar la recuperación excesiva y la recuperación insuficiente, el servidor devuelve una forma segura, fácil de leer y predecible que hace que sus solicitudes y respuestas de API sean más rápidas.

Beneficios de DESCANSO

A pesar de la creciente popularidad de GraphQL, REST sigue siendo uno de los estándares API más populares. Echemos un vistazo a por qué.

  • Curva de aprendizaje: las API RESTful son las más fáciles de aprender y comprender. Esta es su principal ventaja sobre otras API.
  • Serialización: REST viene con un enfoque y formatos flexibles para serializar datos en JSON.
  • Almacenamiento en caché: la API REST puede administrar una gran carga con la ayuda de un servidor proxy HTTP y caché.
  • Solicitud compleja: las API REST tienen un punto final separado para diferentes solicitudes y eso ayuda a que la solicitud compleja sea más manejable que en otras API.
  • Limpio y simple: las API REST son elegantes, simples y limpias. Son fáciles de explorar.
  • Procedimientos HTTP estándar: REST utiliza llamadas de procedimiento HTTP estándar para recuperar datos y realizar solicitudes.
  • Cliente/Servidor: Esto significa que su lógica de negocio está desacoplada de la presentación. Así que puedes cambiar uno sin afectar al otro.
  • REST es sin estado: todos los mensajes intercambiados entre el cliente y el servidor tienen todo el contexto necesario para saber qué hacer con el mensaje.

Inconvenientes de GraphQL

Ahora que hemos discutido las ventajas de GraphQL vs REST, exploremos algunos de los inconvenientes de GraphQL:

  • Curva de aprendizaje difícil: GraphQL no es tan fácil de aprender como REST. La parte más desafiante de construir una API de GraphQL es diseñar el esquema. Esto requiere mucho tiempo y conocimiento del dominio.
  • Carga de archivos: GraphQL no tiene una función de carga de archivos nativa. Esto se puede solucionar usando la codificación Base64, pero el costo de codificar y decodificar de esta manera puede llevar mucho tiempo y ser costoso.
  • Almacenamiento en caché web: el almacenamiento en caché ayuda a reducir el tráfico frecuente al servidor, lo que acelera las solicitudes y el proceso de respuesta al mantener la información a la que se accede con frecuencia cerca del servidor. GraphQL no admite ni depende de los métodos de almacenamiento en caché HTTP, sino que depende de los mecanismos de almacenamiento en caché de los clientes Apollo o Relay.
  • No apto para aplicaciones pequeñas: GraphQL puede no ser la mejor arquitectura de API para crear una aplicación pequeña. Si su aplicación no requiere las consultas más flexibles que ofrece GraphQL, REST es el camino a seguir.
  • Problema de consulta complejo: la capacidad de GraphQL para brindarle a un cliente exactamente lo que quiere también puede generar problemas de propagación de consultas. Si un cliente envía demasiadas consultas anidadas, puede provocar que se envíen consultas incorrectas, lo que puede llevar mucho tiempo al servidor. Es mejor utilizar REST con puntos finales personalizados para cumplir con dichas solicitudes.

Inconvenientes de REST

Ahora, prestemos atención a algunos de los inconvenientes de REST:

¿Luchando con el tiempo de inactividad y los problemas de WordPress? ¡Kinsta es la solución de hospedaje diseñada para ahorrarle tiempo! Echa un vistazo a nuestras características
  • Múltiples viajes de ida y vuelta: el mayor problema con las API REST es la naturaleza de numerosos puntos finales. Esto significa que para que el cliente obtenga todos los recursos para una aplicación completa, debe realizar innumerables viajes de ida y vuelta para obtener los datos.
  • Exceso de búsqueda y subbúsqueda: el problema de la sobrebúsqueda y la subbúsqueda es un inconveniente importante en RESTful APIS. Puede causar retrasos en las respuestas debido a la obtención de grandes cargas útiles no deseadas.
  • Jerarquía: dado que las API REST se basan en recursos de referencia de URI, no se adaptan bien a los recursos que no están organizados de forma natural o a los que no se accede en una jerarquía simple.

Por qué usar GraphQL en lugar de REST

A continuación, analizaremos por qué es posible que desee considerar GraphQL para su futuro desarrollo de API en lugar de RESTful API.

Esquema fuertemente tipado

GraphQL utiliza un sistema de tipo fuerte para definir las capacidades de la API. En GraphQL, el lenguaje de definición de esquemas (SDL) se usa para definir los parámetros relacionados con la forma en que el cliente accede a los datos del servidor. Todas las API expuestas al cliente se escriben en SDL, lo que resuelve el problema de inconsistencia de datos que se observa en las API RESTful.

Sin sobre-obtención o sub-búsqueda

El problema de la obtención excesiva o insuficiente es un problema conocido con las API RESTful en el que los clientes obtienen más o menos información de la que solicitaron. GraphQL resuelve este problema al proporcionar un medio para que el cliente especifique la información necesaria y luego devolver exactamente, y solo , esa información específica.

Puntos finales múltiples

Uno de los mayores problemas de las API RESTful es tener demasiados puntos finales para acceder a la información.

Supongamos que desea acceder a un usuario en particular a través de su número de identificación. Se le presentará un punto final como /users/1 . Pero si desea acceder a las fotos de ese usuario, deberá enviar una solicitud a otro punto final, como /users/1/photos .

En GraphQL, tiene un único punto final y no necesita enviar varias solicitudes para recuperar información diferente sobre el usuario.

Comparación entre GraphQL y REST

Por último, vamos a explorar la principal diferencia entre GraphQL y las API RESTful. Después de eso, discutiremos algunas de las características de un buen diseño de API y compararemos cómo las maneja cada tecnología.

Actuación

No hay duda de que GraphQL funciona más rápido que las API RESTful debido a su capacidad para proporcionar un punto final único para acceder a todos sus recursos. Las API RESTful usan múltiples puntos finales, lo que podría generar latencia en la red.

Complejidad de la consulta

Dado que los puntos finales no se separan en múltiples puntos finales, las consultas de GraphQL pueden volverse cada vez más complejas con el tiempo. Los puntos finales de la API RESTful, por otro lado, están separados, lo que restringe las API RESTful a consultas simples.

Popularidad y apoyo comunitario

GraphQL es un patrón de arquitectura API y un lenguaje de consulta en crecimiento. Aunque todavía es joven, su tasa de adopción y su conjunto de recursos están creciendo rápidamente, y los recursos ya abundan para aquellos interesados ​​en aprenderlo por sí mismos.

REST, por otro lado, ya cuenta con un amplio apoyo de la comunidad y continúa siendo utilizado por empresas de todo tipo, desde aquellas que crean pequeños microservicios hasta aquellas que crean aplicaciones sociales complejas y más.

En la actualidad, el concurso de popularidad entre GraphQL vs REST es un empate. Ambas tecnologías continúan siendo ampliamente utilizadas y bien respaldadas por la comunidad de desarrollo.

Curva de aprendizaje

La curva de aprendizaje de GraphQL es empinada. Requiere un buen dominio del desarrollo de API e ingeniería de software general. Un principiante completo tendrá dificultades para comprender GraphQL lo suficientemente bien como para crear una aplicación compleja.

Por el contrario, es muy fácil comenzar con REST y requiere menos conocimiento del dominio desde el principio. La API RESTful está bien integrada en la mayoría de los principales lenguajes de programación y marcos de trabajo populares, lo que facilita mucho el aprendizaje.

Una captura de pantalla que muestra la comparación entre GraphQL y RESTful API.
GraphQL frente a REST.

Resumen

GraphQL es una nueva tecnología que sigue los pasos de los patrones arquitectónicos de la API RESTful, al igual que se introdujo REST para resolver problemas con los patrones de la API SOAP.

GraphQL le ofrece respuestas más rápidas, un punto final de API único para todas sus consultas y un esquema estricto para un acceso de datos consistente. Estas razones son las que han hecho que las empresas multimillonarias comiencen a cambiar a GraphQL, incluso en la etapa inicial. Sin embargo, a pesar de sus limitaciones, REST, el progenitor de GraphQL, continúa manteniendo una fuerte presencia en el escenario.

¿API GraphQL o RESTful? Obtenga más información en esta guía Haga clic para twittear

En esta guía, exploramos todo lo que necesita saber sobre GraphQL y las API RESTful, incluidas las ventajas y desventajas de cada tecnología, para ayudarlo a decidir con confianza cuál prefiere. También hemos discutido los problemas conocidos con las API RESTful, como la obtención excesiva, la obtención insuficiente y los puntos finales múltiples, y cómo GraphQL intenta resolver esos problemas y aumentar el rendimiento de su aplicación.

Ahora tiene suficiente información para elegir si GraphQL vs REST es apropiado para su próximo proyecto. ¡Háganos saber en la sección de comentarios qué construirá con el ganador elegido!