Curso de seguridad en tu API REST con Spring Boot
Aprende a implementar la seguridad de tu API REST desarrollada con Spring Boot utilizando las diferentes opciones que...
¿Quieres saber más sobre GraphQL? En este artículo vamos a profundizar en qué es GraphQL, por qué es tan poderoso y cómo puedes usarlo para mejorar tu API.
Tabla de contenidos
Si estás vinculado de alguna manera a la programación, probablemente hayas oído hablar de GraphQL, una tecnología creada por Facebook en respuesta a los problemas reales que enfrentaron. Algunos todavía pueden ser escépticos al respecto, pero otros lo ven como una mejora a las API REST.
En caso de que sea la primera vez que escuche hablar sobre GraphQL, aquí hay un hecho interesante: seguramente lo has estado usando todos los días durante los últimos años. Facebook tiene más de mil millones de usuarios activos según los estudios de Digital 2021 Global Digital Overview y GraphQL es fundamental para el funcionamiento de Facebook. Usar Facebook significa usar GraphQL.
En este artículo, cubriremos lo que es GraphQL, por qué es tan poderoso, y cómo puedes usarlo para mejorar tu API.
GraphQL es un nuevo estándar de API que está diseñado para ser declarativo, flexible y eficiente. Desde el punto de vista frontend es un lenguaje de consulta para API de datos, y para el backend es una capa de tiempo de ejecución que debe implementarse. Es de código abierto y fue desarrollado por Facebook, actualmente lo mantiene una gran comunidad de empresas e individuos de todo el mundo.
La creación de GraphQL se inventó en Facebook porque la empresa necesitaba resolver muchos problemas técnicos con su aplicación móvil nativa, de manera que GraphQL permite mejorar la comunicación entre las diferentes partes de una aplicación de software, por lo que hace que esa aplicación sea más fácil de entender, desarrollar, mantener y escalar.
Pero, GraphQL se hizo popular de una forma tan rápida no porque resuelva problemas técnicos, sino porque resuelve problemas de comunicación, proporciona los bloques de construcción para que los desarrolladores definan la estructura de sus datos, cómo acceder a ellos y qué datos devolver. Una API basada en GraphQL puede ser consumida por muchos clientes, no solo por los clientes de GraphQL.
El dominio de GraphQL son los datos. Se puede utilizar para diseñar un esquema que represente los datos y también para pedir campos específicos de los datos.
No está vinculado a una base de datos específica, esto es bueno porque no importa con qué motor de almacenamiento tenga que lidiar. Así es, es sólo una especificación y un lenguaje de consulta para tu API. No es una biblioteca, no es un producto, no es una base de datos y se ha desarrollado como una alternativa más flexible y eficiente a REST.
GraphQL puede implementarse en más de 20 lenguajes de programación, de hecho puede conseguir en este link la documentación sobre las herramientas y servicios para ayudarlo a comenzar con GraphQL en el lenguaje de programación de su preferencia, esto se debe a que GraphQL es una especificación, es decir, especifica cómo debe funcionar, permitiendo a cualquiera implementar GraphQL en cualquier lenguaje de programación. Existe una implementación oficial en Javascript.
Es un lenguaje tipado. Esto significa que utiliza tipos para definir recursos, añade tipos a los campos de cada recurso. También utiliza tipos para comprobar estáticamente los errores.
Es importante mencionar que empresas grandes y pequeñas, desde Twitter y Facebook hasta Yelp y Twitch, están implementando GraphQL. En 2016, Github cambió su API de REST a GraphQL y en 2017, AWS lanzó una plataforma basada en GraphQL para crear aplicaciones.
A continuación, se muestra cómo se pueden expresar requisitos de datos con una consulta GraphQL.
Describe tus datos:
type Proyecto{
nombre: String
leyenda: String
contribuyentes: [User]
}
Pide los datos que quieras:
{
proyecto(nombre: "GraphQL") {
leyenda
}
}
Obtenga resultados predecibles:
{
"proyecto": {
"leyenda": "Un lenguaje de consulta para API"
GraphQL es un lenguaje de consulta para APIs. En lugar de enviar múltiples peticiones independientes (por ejemplo, una para la lista de usuarios, otra para sus roles, otra para su empresa), GraphQL permite a los clientes hacer una sola petición, y obtener la respuesta con todos los campos que necesitan.
Minimiza la cantidad de datos que deben transferirse a través de la red y, por lo tanto, mejora considerablemente las aplicaciones que operan en circunstancias por ejemplo en donde la red no sea eficiente o el dispositivo sea de baja potencia.
GraphQL proporciona estándares y estructuras integrales para implementar funciones de API de manera escalable y fácil de mantener.
Cada vez más equipos eligen GraphQL en lugar de (o junto con) REST para sus API web. Las consultas GraphQL brindan a los clientes una gran flexibilidad en la forma en que solicitan datos del servidor, lo que evita problemas como la captación excesiva o insuficiente de datos y permite recuperar múltiples recursos en una sola solicitud.
Los desarrolladores de backend pueden utilizar GraphQL para modelar sus datos, mientras que los desarrolladores de frontend pueden usar GraphQL para escribir consultas para recuperar datos específicos.
Una de las principales ventajas de GraphQL es que mejora la comunicación entre las APIs y los consumidores. Facilita la comunicación del equipo al proporcionar una forma sencilla para que los desarrolladores del frontend conozcan todos los métodos que expone la API.
GraphQL permite a los clientes pedir los datos exactos que necesitan. Ni más ni menos. También permite a los clientes pedir recursos anidados en la misma operación, evitando la necesidad de peticiones en cascada al estilo REST, ya que tiende a empujar la complejidad a clientes de la API.
Ser un lenguaje tipado es la fuente de muchas de las mayores ventajas de GraphQL, como permitir la introspección automática de la API y la documentación.
Otro beneficio de GraphQL es que optimiza el uso de la red reduciendo las cargas útiles HTTP y número de peticiones. La reducción de los datos y las solicitudes se traduce directamente en una mejor experiencia para los usuarios móviles. En caso de que necesite más datos, también puede evitar realizar múltiples llamadas a su API.
Aunque no necesita React, Apollo o Relay para usar GraphQL en sus aplicaciones, estas bibliotecas agregan más valor a cómo puede usar las API GraphQL sin tener que realizar tareas complejas de administración de datos. Lo más importante es que no necesita mantener la documentación de su API por separado. La documentación GraphQL está incorporada y es de primera clase.
Otra de las grandes ventajas tecnológicas de GraphQL es la comunicación con múltiples servicios. Cuando tiene varios clientes que solicitan datos de varios servicios de almacenamiento de datos como (PostgreSQL, MongoDB y una caché de Redis), una capa GraphQL en el medio puede simplificar y estandarizar esa comunicación. En lugar de que un cliente vaya directamente a los múltiples servicios de datos, puede hacer que ese cliente se comunique con el servicio GraphQL.
Luego, el servicio GraphQL se comunica con los diferentes servicios de datos. Un servicio GraphQL traduce la solicitud de un solo cliente en múltiples solicitudes a múltiples servicios utilizando diferentes lenguajes.
A continuación, una ilustración de la comunicación de GraphQL:
Imagen obtenida de: https://perspectives.mobilelive.ca/
Probablemente hayas oído hablar de REST, el estándar para la creación de APIs. REST es una filosofía de diseño que dicta cómo deben representarse y acceder a los datos.
Las API de GraphQL a menudo se comparan con las API de REST porque estas últimas han sido la opción más popular para las API de datos que demandan las aplicaciones web y móviles.
REST es genial, pero tiene algunas limitaciones. Una de las más importantes es que no es ideal para consultar grandes conjuntos de datos. Ahí es donde entra GraphQL, GraphQL es un lenguaje de consulta para APIs, similar a SQL para bases de datos relacionales.
Uno de los problemas más comunes con REST es la captación excesiva e insuficiente de datos porque siempre devuelve una estructura fija, con REST no es muy viable que retorne los datos exactos que el cliente solicita, ya que devuelve más datos de los pedidos, se convierte en un desperdicio de recursos de red y memoria tanto para el cliente como para el servidor.
Con el desarrollo de las API REST los desarrolladores frontend deben esperar que el equipo de backend termine de desarrollar estas APIs y así la aplicación cliente pueda obtener y publicar los datos. Con GraphQL ambos entornos de desarrollo backend y frontend pueden trabajar de forma sincronizada, en paralelo, sin afectar el flujo de trabajo.
REST no es flexible, en una API REST típica, se crea un nuevo punto final cuando cambian los requisitos de datos y, además, el punto final debe permanecer intacto. Cuantos más puntos finales tenga, más difícil será mantenerlos. Del mismo modo, si su API es utilizada por una variedad de clientes diferentes con diferentes necesidades, una API REST no se adaptará a sus propósitos. Si su interfaz cambia con frecuencia, querrá una API con más flexibilidad.
Se conoce como puntos finales a las solicitudes de los datos que la aplicación cliente necesita y el servidor devuelve la respuesta en función de la consulta solicitada.
Con REST cuando un cliente necesita datos sobre múltiples recursos, tiene que realizar múltiples solicitudes de red a esa API REST y luego juntar los datos combinando las múltiples respuestas que recibe. Este es un problema importante, especialmente para las aplicaciones móviles, porque los dispositivos móviles suelen tener limitaciones de procesamiento, memoria y red.
GraphQL tiene solo un punto final, que proporciona todos los datos que se le especifican.
En la siguiente ilustración puedes detallar a simple vista la gran diferencia entre API REST y GraphQL, una de las que ya he comentado anteriormente, la solicitud y obtención de datos. Podemos ver la diferencia para obtener por ejemplo la información del autor de un blog.
Imagen obtenida de: https://manning.com/books/graphql-in-action
Como puedes ver en el gráfico, REST realiza varias peticiones o solicitudes diferentes para obtener información de un blog, hay varios viajes de ida y vuelta que se deben realizar mientras se utiliza REST para obtener la información que necesita una aplicación cliente. Tiene que agregar puntos finales adicionales si se amplía la información.
Si se requiere saber el nombre del autor realiza una petición, si se requiere saber los post de ese autor debe realizar otra petición o punto final (endpoint), y así sucesivamente.
Por otra parte, también puede obtener información innecesaria, cuando solicita el id del autor puede que traiga información como fechas, edad, etcétera, y lo único que se requiere es conocer el nombre del autor, por ejemplo.
En cuanto a GraphQL puedes observar que hay una consulta para solicitar lo que se necesita y obtener exactamente los datos que solicitaste. No hay viajes ida y vuelta, solo buscamos los campos que necesitamos del servidor a la aplicación cliente. En pocas palabras, haces una sola petición, y obtienes la respuesta con todos los campos que se necesitan.
Por supuesto, si lo ves desde el punto de vista de la solicitud de pocos datos, en una escala pequeña, es decir, en un proyecto pequeño en el que realizar varios “viajes” al servidor no representa mayor conflicto, claramente no habrá mayor diferencia o gran problema hacerlo de esta manera. Pero si estás trabajando con una gran cantidad de datos, es evidente que será de mayor beneficio poder reducir las solicitudes a la API lo más que se pueda, y con GraphQL lo puedes hacer de forma eficiente.
Puedes observar en el análisis de la ilustración que la consulta está organizada para obtener la información con precisión.
Manejo diferente del almacenamiento en caché, REST puede manejar el almacenamiento en caché mediante el método GET. Sin embargo, GraphQL usa POST para obtener datos y las URL no identifican las entidades, lo que significa que GraphQL carece de la funcionalidad de almacenamiento en caché nativo.
Los enfoques del ciclo de vida de desarrollo de GraphQL y REST API son útiles según la necesidad, y ambos tienen sus ventajas y desventajas. Lo que elija para su proyecto dependerá de sus necesidades y recursos. Lo que sí sabemos es que GraphQL está ganando popularidad ya que ha demostrado ser una herramienta poderosa.
También te puede interesar
Aprende a implementar la seguridad de tu API REST desarrollada con Spring Boot utilizando las diferentes opciones que...
Aprende con este curso a desarrollar una API REST utilizando para ello Spring Boot, desde cero hasta la...