GraphQL: Un lenguaje de consulta para APIs

Para nadie es un secreto que en el panorama del desarrollo web actual, las APIs son indispensables en la integración de servicios y manipulación de data. Sin embargo, a pesar de que la especificación REST está aún vigente (fue propuesta en el año 2000), han surgido necesidades para el desarrollo de productos cada vez más complejos, pues éstos exigen un cambio de enfoque o una extensión del mismo a la hora de manipular datos. Es ahí donde entra GraphQL

¿Qué es GraphQL?

GraphQL se define como un lenguaje de consultas para APIs. Ha sido desarrollado por Facebook y no está atado a ningún lenguaje o tecnología frontend o backend. GraphQL, como lenguaje de modelado, se basa en la descripción exacta de la data en nuestra API, con la finalidad de que el cliente pueda solicitar exactamente lo que necesita, haciendo la petición más rápida y eficiente.
La idea de GraphQL es que podamos enviar un objeto de tipo consulta a nuestro servidor o proveedor de datos, especificando no sólo un único recurso o verbo como hacíamos en REST sino una petición más completa y compleja, que implique varias acciones o consultas a diferentes recursos.

Consultas

¿Cómo se ve una consulta en GraphQL?. Básicamente, enviamos un payload con la descripción de lo que queremos retornar según nuestra estructura de datos. Por ejemplo

En el lado izquierdo, vemos como el payload solicita un objeto del tipo hero, especificando que debe retornar únicamente el atributo name.

Podemos solicitar consultas más complejas, como por ejemplo, hacer fetch de los objetos tipo friend, asociados a las entidades de tipo hero.

El filtrado podemos hacerlo enviando parámetros como si se trataran de argumentos de funciones

Incluso, se puede especificar el tipo de dato enviando como argumento el tipo que queremos recibir.

Mutaciones

Ahora bien, la mayoría de las novedades que se comentan de GraphQL tienen que ver con el fetch de data, ¿pero qué pasa si queremos modificar data existente? En qué se diferencia a los POST y PUT de REST?. Es aquí donde entran las mutaciones.
Es un nombre bastante cool, pero básicamente son peticiones donde definimos métodos para crear o modificar datos, así:

  • Del lado superior, tenemos la definición de la mutación, donde definimos un método que recibe ciertos parámetros para crear data.
  • Del lado inferior, tenemos la definición del payload donde tenemos las variables a ser implementadas en la mutación.

Esta definición nos arrojaría la siguiente respuesta, que es simplemente el resumen de la data mutada.

Puedes probar aquí un live editor de GraphQL

Más detalles sobre queries y mutaciones

¿En qué entornos puedo implementar GraphQL?

A primera vista es obvio que es un enfoque que cala bastante bien en Javascript. Para Backend, en Node.JS existe GraphQL JS, que permite la definición de modelos de data y la consultas de los mismos para APIs.

Para Frontend, existe Apollo Data, un cliente que permite realizar consultas en frameworks populares como React y Angular 2.

Para PHP también existe GraphQL PHP, que es la implementación del concepto en PHP basado en la especificación para Javascript, que permite el modelado de datos y consultas

Al igual que en el caso de PHP, existe una implementación en Java basado también en la especificación de Javascript

Más librería y plataformas

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s