Ir al contenido principal

El Lenguaje del Futuro: GraphQL y Bases de Datos

¿Qué es GraphQL?

GraphQL es un lenguaje de consulta y manipulación de datos para APIs, y un entorno de ejecución para realizar consultas con datos existentes.

Proporciona una aproximación para desarrollo APIs web y ha sido comparado y contrastado con REST y otras arquitecturas de servicio web. Permite a los clientes definir la estructura de datos requerida, y la misma estructura de datos será regresada por el servidor, impidiendo así que excesivas cantidades de datos sean regresadas, aunque esto tiene implicaciones en cómo de efectivo puede ser el caché web de los resultados de estas consultas. La flexibilidad y riqueza del lenguaje de consulta también añade complejidad que puede no valer la pena para APIs más sencillas. Consta de un sistema de tipos, lenguaje de consulta y semántica de ejecución, validación estática, e introspección de tipos.



Historia

GraphQL es un lenguaje de consulta para API que fue desarrollado por Facebook a partir de 2012 para resolver un problema específico: con el auge de los teléfonos inteligentes y los navegadores web móviles, el uso de llamadas API RESTful era lento e ineficiente, especialmente en redes móviles. Múltiples llamadas de API a múltiples puntos finales tomaban tiempo, y a menudo devolvían más información de la necesaria o no la suficiente. Las grandes cantidades de datos que se devolvieron, combinadas con varias llamadas a la API, dieron como resultado una experiencia de usuario deficiente.

Cuando se implementó en la aplicación de Facebook para iOS en 2015, el mundo de la tecnología vio las ventajas de la nueva tecnología, lo que resultó en una rápida adopción por parte de muchas empresas líderes. En 2015, GraphQL era de código abierto y, en 2019, se creó GraphQL Foundation para seguir desarrollando la especificación y las implementaciones de referencia. Aunque originalmente se diseñó teniendo en cuenta la informática móvil, la implementación se ha extendido a la informática de escritorio y servidor. La adopción de GraphQL se ha ampliado para incluir empresas y organizaciones como GitHub, Pinterest, Intuit, Coursera y Shopify.

GragphQL frente a REST

Hay muchas ventajas que GraphQL puede proporcionar sobre las interfaces API REST tradicionales. Si bien cada implementación de tecnología tiene sus ventajas y desventajas, GraphQL ofrece más flexibilidad para recuperar información. Una sola consulta de GraphQL bien escrita puede devolver información que requeriría varias llamadas a la API RESTful con solicitudes HTTP. Los investigadores y desarrolladores han descubierto que las llamadas de GraphQL devuelven conjuntos de datos que son un 90 % más pequeños que el uso de API RESTful para adquirir los mismos datos.


Cuando utiliza una API RESTful para recuperar datos, a menudo tiene que realizar varias llamadas a la API para obtener toda la información que busca. Por ejemplo, si está iniciando sesión en su banco, primero debe obtener su número de cliente. Una vez que tenga su número de cliente, puede obtener su número de cuenta. Desde allí, puede obtener el saldo de su cuenta:


No hay nada de malo con las API REST, pero las múltiples llamadas API suelen ser lentas, con muchos datos e ineficientes. En el ejemplo anterior, para obtener el saldo de su cuenta bancaria, tuvo que crear una secuencia de tres llamadas API encadenadas, cada una de las cuales es una solicitud adecuada y una respuesta completa definida por el esquema. Una solicitud de GraphQL es más sencilla y específica, ya que trata solo los tres valores de ID de cliente, ID de cuenta y saldo:



Términos utilizados

Tipo

GraphQL tiene un sistema de tipos y está fuertemente tipado. Viene con algunos tipos escalares incorporados como Int, Float, String, y Boolean, pero también le permite definir tipos personalizados.

Un tipo personalizado se puede definir así:


Esquema

Un esquema es una descripción de los datos disponibles a través de una API de GraphQL. Incluye los tipos de objetos, sus campos y tipos de datos asociados, relaciones, consultas, mutaciones y más. Un esquema generalmente se define utilizando el lenguaje de definición de esquemas (SDL).

Resolver

Un resolver es una función que recupera los datos de un campo en particular en una consulta de GraphQL. Las funciones de resolución son responsables de obtener los datos de una fuente de datos y devolverlos en el formato esperado.

Consulta

Una consulta es una solicitud de datos de solo lectura de una API de GraphQL. Puede pensar en las consultas como solicitudes GET en la API REST.

Ejemplo:

Esta consulta devuelve la lista de todos los usuarios.

Mutación

Una mutación es una solicitud para manipular los datos en una API de GraphQL. Puede pensar en las mutaciones como solicitudes POST/PUT/PATCH/DELETE en la API REST. Las mutaciones también pueden definir qué datos se devuelven.

Ejemplo:


 Esta mutación crea un nuevo autor y devuelve la identificación del autor y createdAt.

   Suscripción

Una suscripción es una solicitud de actualizaciones en tiempo real de una API de GraphQL. Las suscripciones permiten a los clientes recibir actualizaciones tan pronto como estén disponibles, sin sondear el servidor.


Ejemplo:

Esta suscripción se llama cuando se crea una nueva publicación.


Funcionamiento

Para entenderlo más a fondo debes entender que GraphQL usa un sistema de tipos para estructurar la información:

·      Queries: Representan las consultas (la petición de datos)

·      Mutations: En Rest es el equivalente a post, delete y update.

·      Subscriptions: Son eventos en tiempo real que se comunican a través de un Websocket

Esta estructura de Typos (Los queries, mutations y subscriptions) se llaman Schema, que es el contrato que le comunica al cliente como va a consultar la información. Esta es la famosa autodocumentación de GraphQL, es decir cuando el cliente se conecta tiene acceso a ese Schema y puede revisar como está estructurada la información y saber que va a recibir y que datos puede pedir.

Una vez que tenemos la estructura de Typos, estos se conectan a los Resolvers que se conectan a su vez a la fuente de datos que puede ser SQL, No SQL, GraphQL o API rest. Los resolvers son funciones que se ejecutan cada vez que se hace una petición, y se conectan al Schema para entender la estructura de datos y luego se conectan a la fuente de datos para poder devolverle al cliente los datos que está solicitando.

Esquema que resalta el funcionamiento de una consulta en GraphQL

Ventajas


GraphQL es fácil de aprender, los usuarios pueden agregar datos de múltiples fuentes y es un lenguaje moderno para su API.

  • Esquema
La API de GraphQL se basa en un esquema fuertemente tipado. Esto le permite detectar errores de tipo y fallas en tiempo de compilación en lugar de en tiempo de ejecución. Además, las API de GraphQL son introspectivas, lo que significa que pueden proporcionar información sobre sí mismas sin depender de ninguna documentación externa.
 
  • Obtención de datos flexible y eficiente
Las API de GraphQL son extremadamente flexibles ya que permiten a los clientes especificar exactamente lo que necesitan. Esto resuelve el problema de la obtención insuficiente y excesiva y reduce la cantidad de solicitudes de API. Menos solicitudes de API dan como resultado un mejor rendimiento.
 
  • Actualizaciones de API
Con GraphQL, puede integrar sin problemas nuevos campos y tipos sin afectar las consultas actuales. Los campos en desuso y obsoletos también se pueden ocultar de las herramientas. Las API de GraphQL brindan a las aplicaciones acceso constante a nuevas funciones y fomentan el desarrollo de un código de servidor más limpio y sostenible.
 
  • Fuente única de la verdad
Un esquema GraphQL establece una única fuente de verdad en una aplicación GraphQL. Ofrece a una organización una manera fácil de administrar toda su API.
 
  • Extensiones GraphQL
GraphQL está respaldado por una gran comunidad de desarrolladores de GraphQL y viene con muchas extensiones de código abierto. Las extensiones simplifican algunas de las tareas comunes de la API, como la paginación, el almacenamiento en caché, la supervisión del rendimiento, etc.

 

Desventajas

  • Complejidad

GraphQL traslada gran parte del trabajo de una consulta de datos al lado del servidor, lo que hace que los backend sean más complejos. Además de eso, el lenguaje de consulta y las definiciones de esquema pueden requerir más planificación y mantenimiento por adelantado.

  • Curva de aprendizaje

GraphQL tiene una curva de aprendizaje más pronunciada que REST. Además, los desarrolladores de GraphQL suelen ser más caros y difíciles de encontrar que los desarrolladores de REST.

  • Falta de estandarización

Una de las principales críticas a GraphQL es la falta de estandarización en su implementación. Las API REST tienen un conjunto bien establecido de principios y mejores prácticas, mientras que la documentación de GraphQL solo proporciona algunos consejos generales sobre cómo implementar cosas. Esto puede generar incoherencias y confusión en la forma en que se diseñan y utilizan las API de GraphQL.

  • Seguridad

Lo mejor de GraphQL es que los clientes pueden solicitar exactamente lo que necesitan, pero, por otro lado, eso podría ser un riesgo potencial de seguridad. Es importante validar y desinfectar adecuadamente la entrada del usuario para evitar que se ejecuten consultas maliciosas.


Video para complementar la lectura:


Conclusión

GraphQL es una tecnología a tener muy en cuenta hoy en día cómo herramienta de integración con los sistemas de información. De forma general, se acepta que las APIs REST están más orientadas a la integración entre servicios de internet (por ejemplo un servicio de autenticación de un usuario) mientras que GraphQL está más orientada a la integración entre productos de datos (por ejemplo un comparador de precios en Internet). Todo apunta en este interesante debate entre integración de productos de TI versus los productos de datos, ambas tecnologías coexistirán en el futuro cercano.



Presentado por:

Richard Torres. Estudiante de la Universidad Tecnológica de Panamá de la Facultad de Ingeniería en Sistemas Computacionales de la carrera de Licenciatura en Redes Informática.


Comentarios