GraphQL: evolución del sistema de gestión de bases de datos de la era moderna

La palabra GraphQL sigue apareciendo mucho en la web. También se ha mencionado en muchos eventos técnicos, el más reciente fue AWS re:Invent 2017, donde anunciaron AppSync, un servicio GraphQL completamente administrado.

¿Por qué GraphQL de repente está causando revuelo en la comunidad de desarrolladores y cómo impacta su aumento en el mundo de la tecnología?

Si bien el nombre puede inducirlo a error y creer que se trata de un lenguaje de consulta, es un reemplazo de REST (y sus versiones alternativas). He compilado los puntos clave para cualquiera que quiera entender GraphQL.

Para ayudarlo a comprender mejor y resaltar las diferencias, he incluido ejemplos ilustrados usando REST y HTTP.

¿Qué es GraphQL?

GraphQL fue desarrollado internamente por Facebook en 2012 y luego se lanzó al público en octubre de 2015. En la terminología de Facebook: GraphQL es un lenguaje de consulta diseñado para crear aplicaciones de clientes al proporcionar una sintaxis y un sistema intuitivos y flexibles para describir sus requisitos de datos e interacciones. Proporciona un lenguaje para consultar datos de backends y cambiar datos en ellos.

En pocas palabras, GraphQL es un lenguaje de consulta creado por Facebook, que especifica cómo solicitar datos de las API.

Los fundamentos de GraphQL

GraphQL tiene 3 operaciones de alto nivel:

Consultas: se utiliza para obtener datos, como el método GET en REST
Mutaciones: se utilizan para crear/modificar datos seguidos de recuperación, como métodos POST, PUT, DELETE en REST
Suscripciones: conexiones de larga duración para recibir actualizaciones de datos del servidor, como sockets web
Estas operaciones se exponen a través de un esquema que define las capacidades de una API. Un esquema se compone de tipos. El esquema definido por el desarrollador determina la capacidad de la API de GraphQL.

Cada API de GraphQL puede tener dos tipos:

Tipos de raíz, por ejemplo, consulta, mutación, suscripción
Tipos definidos por el usuario, por ejemplo, todo, humano, animal, etc.
Cada API de GraphQL tendrá un tipo de consulta y puede tener o no un tipo de mutación y suscripción. Los tipos raíz determinan el punto de entrada de la consulta de GraphQL.

Consulta de ejemplo:

{
humano (id: 101) {
nombre
años
}
}

La consulta anterior hace lo siguiente:

Comienza con el objeto raíz
Seleccionamos el campo humano con id 101 en ese
Para un objeto héroe devuelto, seleccionamos los campos de nombre y edad
El resultado de la consulta será:

{
“datos”: {
“humano”: {
“nombre”: “Juan Pérez”,
“edad”: 20
}
}
}

Para que la consulta anterior funcione, debemos agregar un tipo humano al esquema que consta de los campos que puede devolver. El tipo de consulta raíz y humana es la siguiente:

tipo Humano {
nombre: Cuerda!
edad: Int!
}
escriba consulta {
humano (id: ID!): Humano
}

Los campos de un tipo necesitan devolver algunos datos. Esto sucede en un GraphQL. La API es a través de un concepto conocido como resolución de GraphQL. Esta es una función que llama a una fuente de datos o invoca un activador para devolver algún valor (como un registro individual o una lista de registros).

Los solucionadores pueden tener muchos tipos de orígenes de datos, como bases de datos NoSQL, bases de datos relacionales o API REST. Podemos agregar datos de múltiples fuentes de datos y devolver tipos idénticos, mezclándolos y combinándolos para satisfacer sus necesidades.

Una vez que un esquema se conecta a una función de resolución, una aplicación cliente puede emitir una consulta de GraphQL o, opcionalmente, una mutación o suscripción. Estoy seguro de que ha comenzado a ver cómo GraphQL es diferente de sus predecesores y otras bases de datos de uso común.

Sin embargo, ¿tiene beneficios reales? Vamos a ver.

Beneficios de GraphQL

Mejor recuperación de datos

La consulta de datos es muy sencilla y se reducen los viajes de ida y vuelta a los servidores. Considere un blog que tiene contenido, comentarios, etc. Cada comentario puede tener una descripción y usuarios, cada usuario tendrá nombre, correo electrónico, lista de blogs.

Imagina que necesito el contenido del blog con el comentario, el usuario que comentó y los blogs de ese usuario. Para conseguirlo tendremos que realizar las siguientes llamadas REST.

GET – api/vi/blogs/101/ -> devolverá el blog con su contenido
GET – api/v1/blogs/101/comments -> devolverá los comentarios del blog
GET – api/v1/users/30/blogs -> devolverá los blogs del usuario

Digamos que teníamos 4 comentarios, por lo tanto, N = 4, por lo que la cantidad de llamadas necesarias es el Paso 1 + Paso 2 + Paso 3 x 4, que se evalúa en 6 llamadas. Requerimos los blogs de todos los usuarios que comentaron en el blog, por lo que el paso 3 deberá realizarse varias N veces según la cantidad de usuarios.

Ahora se puede archivar exactamente lo mismo en 1 llamada cuando se usa GraphQL con la siguiente consulta

{
blog (id: 101) {
contenido
comentarios {
contenido
usuarios {
nombre
Email
Blog {
contenido
}
}
}
}
}

¿Notó cómo podemos reemplazar varias líneas de código con una sola lógica simple?

Mejor control de versiones

En una API REST, si hay un campo nuevo o algún cambio en el recurso, se debe crear una nueva versión del punto final. Esto implica administrar más código, otro punto final y eliminar el punto final anterior una vez obsoleto.

GraphQL resuelve este problema al permitir que el usuario mantenga el mismo punto final mientras agrega nuevos campos al tipo dinámicamente sin romper nada existente.

Mejor control de los datos de respuesta

Considere que tenemos una API que es consumida por una aplicación web receptiva. Según el dispositivo en el que se haya abierto la aplicación, los datos que se muestran en la pantalla variarán, algunos campos pueden estar ocultos en dispositivos con pantallas más pequeñas y todos los campos pueden mostrarse en dispositivos con una pantalla más grande.

La siguiente infografía explica varios puntos débiles relacionados con la gestión de datos devueltos al usar REST:

Con GraphQL, solo es cuestión de consultar los campos que se requieren según el dispositivo. El front-end tiene el control de los datos que solicita, y los mismos principios se pueden utilizar para cualquier API de GraphQL.

Información agregada

Con GraphQL, podemos agregar fácilmente datos de diferentes fuentes y servirlos a los usuarios bajo un solo paraguas en lugar de realizar múltiples llamadas REST desde el front-end o el back-end. Podemos exponer un sistema heredado a través de una API unificada.

Como se mencionó anteriormente, cada API de GraphQL se compone de tipos, esquemas y resolutores. Para crear una API, necesitamos crear un servidor GraphQL en algún idioma. Como ya sabe, GraphQL es un lenguaje en sí mismo y tiene una especificación, la especificación debe implementarse en un lenguaje de programación para ser utilizada.

Casi todos los lenguajes de programación modernos ahora tienen una implementación de la especificación GraphQL que puede utilizar. Por lo tanto, la integración y la migración son extremadamente fluidas y sencillas.

Recursos importantes:

Como programador, estoy seguro de que está ansioso por probar GraphQL. He recopilado algunas herramientas y bibliotecas útiles que puede utilizar para que su viaje con GraphQL sea más divertido.

gráficoql – Una implementación de GraphQL en JS
Apolo – Un conjunto de herramientas para GraphQL. Cuenta con implementaciones de servidor para múltiples plataformas.
prisma – Una herramienta para convertir su base de datos en una API GraphQL. Soporta múltiples bases de datos.
Scaphold – Un servidor GraphQL alojado
AWS AppSync – Un servidor GraphQL alojado que está completamente administrado por AWS y se conecta a múltiples fuentes de datos

Conclusión:

GraphQL es muy poderoso y tiene mucho potencial, pero aún está en pañales. Sin embargo, en un corto período de tiempo, ha ganado mucha tracción y ha sido ampliamente adoptado por la comunidad.

La popularidad muestra claramente la facilidad de uso y la importancia de GraphQL. Los beneficios que he discutido aquí son solo algunos de los que he experimentado al usarlo de primera mano.

A medida que el sistema evolucione, estoy seguro de que quedará mucho más por descubrir: existe un enorme ecosistema en el que se puede utilizar GraphQL.

Sobre nosotros:

En Cuelogic Technologies utilizamos tecnología de punta y de la era moderna para ofrecer productos e inteligencia preparados para el futuro, con autoaprendizaje y sin deuda técnica. Somos uno de los mejores empresas de desarrollo de software offshore. GraphQL es una de las muchas tecnologías futuristas con las que estamos trabajando.

Publicado originalmente en Blog Cuelogic

Similar Posts

Leave a Reply

Your email address will not be published.