¿Qué es GraphQL y dónde usarlo?
En esta entrada vamos a ver qué es GraphQL y donde usarlo.
¿Qué es GraphQL?
GraphQL es un lenguaje orientado a queries para nuestras API’s, que corre en el lado servidor y permite obtener la información deseada a partir de un sistema definido para la obtenerla. Uno de sus puntos fuertes es que no esta atada a ningún sistema de base de datos.
GraphQL se creo y pensó para reducir el coste de las queries contra base de datos, es decir, intentar optimizar el número de campos que se traían o reducirlos, ya que no siempre se necesitan todos los campos. Este lenguaje de queries fue creado por Facebook en el año 2012 y en el año 2015 fue publicada su primera release.
¿Dónde usar GraphQL?
GraphQL se puede utilizar en una amplia variedad de situaciones y contextos. Aquí hay algunos ejemplos de dónde se puede usar GraphQL:
- Desarrollo de aplicaciones web y móviles: GraphQL es especialmente útil en el desarrollo de aplicaciones que requieren una comunicación eficiente entre el cliente y el servidor. Puede ser utilizado en aplicaciones de comercio electrónico, redes sociales, plataformas de viajes, entre otros.
- Construcción de APIs: GraphQL puede ser utilizado para diseñar y construir APIs flexibles y escalables. Permite a los desarrolladores proporcionar a los clientes la capacidad de solicitar los datos específicos que necesitan, lo que ayuda a reducir el exceso de solicitudes y mejora el rendimiento de las aplicaciones.
- Microservicios y arquitecturas orientadas a servicios: GraphQL es una opción popular en arquitecturas de microservicios, ya que permite a los equipos de desarrollo trabajar de forma independiente en sus propios servicios y definir sus propios esquemas GraphQL.
- Integración de múltiples fuentes de datos: Si tienes múltiples fuentes de datos diferentes, GraphQL puede actuar como una capa de abstracción para unificar y consultar estos datos de manera coherente.
- Aplicaciones en tiempo real: GraphQL también se puede utilizar en aplicaciones en tiempo real, donde la información se actualiza constantemente y se envía a los clientes de manera eficiente. Puedes usar bibliotecas como GraphQL subscriptions o GraphQL over WebSockets para habilitar esta funcionalidad.
Estos son solo algunos ejemplos, pero en general, GraphQL se puede usar en cualquier escenario en el que haya una comunicación de datos entre el cliente y el servidor y se busque una forma eficiente y flexible de solicitar y manipular esos datos.
Schemas, resolvers y otros términos de GraphQL
Los desarrolladores de API utilizan GraphQL para crear un esquema para describir todas las consultas que se pueden y se van a necesitar de un servicio.
Un esquema en GraphQL es un compuesto de tipos de objetos, que define el tipo de objeto que podrás consultar así como sus campos.
El desarrollador del API adjunta cada campo en un esquema a una función llamada RESOLVER, y esta función es a la que se llama durante la ejecución para producir el valor.
En un principio GraphQL se encarga de validar y definir la sintaxis para las queries en el API, y deja el resto de las decisiones al diseñador de API. GraphQL ni impone ni proporciona ningún direccionamiento sobre que lenguaje usar o como o dónde almacenar la información
Si nos vamos al lado del cliente, la mayoría de las operaciones que se van a llevar a cabo, son queries y mutaciones (mutations). Si pensamos en el típico CRUD, una query podría ser cualquier operación de lectura, y todas las demás las englobaríamos en mutaciones.
Ventajas de usar GraphQL
- Muchos open source GraphQL ofrecen extensiones que no estarían disponibles para una arquitectura API REST.
- GraphQL no te obliga a tener una arquitectura concreta o específica. Puede estar en la parte superior de cualquier REST API y funcionar con gestores de API y con la arquitectura que se tenga.
- Permite la evolución de cualquier arquitectura, sin romper las consultas existentes.
- Si los tipos de datos están fuertemente definidos, reduce la comunicación entre cliente y base de datos, con lo que se permite tener un mejor rendimiento y una mayo optimización.
- GraphQL es introspectivo,
Desventajas de usar GraphQL
- Curva de aprendizaje para aquellos que están familiarizados o suelen trabajar con API REST. Los conceptos cambian, y la forma de trabajar también, por lo que si se decide por este sistema el cambio debería ser progresivo en cualquier entorno.
- GraphQL añade complejidad a los desarrolladores que se encuentran en el lado servidor.
- Cache: Debido a que el uso común de GraphQL es sobre HTTP, cache a nivel de red puede llegar a ser muy complicado. Una forma de resolverlo es con Persisted Queries.
- Graphql queries ocupan y utilizan más bytes que una simple llamada REST contra un endpoint.
Ejemplos:
La mejor manera de poder entender GraphQL es con ejemplos y practicando aquí van algunos, de todos modo en la página oficial, GraphQL , se puede encontrar multitud de información así como ejemplos y ayuda.
Ejemplo 1: Preguntamos sobre un campo específico
{ me { name } }
GraphQL API devolvería un resultado en JSON como este:
{ "me": { "name": "Noel" } }
Ejemplo 2: Obviamente le podemos pasar parámetros a la query, por ejemplo, quiero el identificador 2 de una persona.
{ person(id: "2") { name country } }
The result:
{ "data": { "person": { "name": "Noel, "country": "Spain" } } }
Estas queries que hemos realizado son bastante sencillas y simples, con la que hemos visto como un cliente puede construir una query con GraphQL, pero el potencial de GraphQL es mucho mayor, y lo mejor que se puede hacer es leer y practicar.
Open Source con GraphQl
Hay bastantes proyectos de open source relacionados con GrapQL, a continuación pongo unos cuantos:
- Apollo, incluye cliente y servidor
- Offix, permite mutaciones y queries.
- Graphback, para clientes y servidores.
- OpenAPI-to-GraphQL, si utilizas swagger en tus proyectos esta es tu herramienta transforma de swagger a GraphQL.
Conclusión
En esta entrada sobre Qué es GraphQL y dónde usarlo hemos visto cómo aplicar este lenguaje así como sus ventajas y desventajas en su utilización.
Si quieres ver un ejemplo con quarkus puedes pulsar aquí.
1 pensamiento sobre “¿Qué es GraphQL y dónde usarlo?”