Si eres un desarrollador Backend y has escuchado de GraphQL, pero no sabes de que se trata, en este articulo te daré un resumen de todo esto.
Pero primero empecemos conociendo: ¿Porque GraphQL?
¿Porque GraphQL?
Tradicionalmente los desarrolladores de aplicaciones web y moviles hemos usado mucho las API REST como forma de comunicar el backend y el frontend.
REST es un conjunto de practicas que definen como podemos solicitar datos de un servidor en aplicaciones cliente (web, movil, desktop, etc). REST, No es una tecnología, es más una guia de estilo para desarrollar sistemas de Hipermedia ditribuidos, que se creo al rededor de los años 2000, y que aun sigue siendo ampliamente utilizada.
en la practica usar REST APIs significa que puedes crear un servidor con unas cuantas URLS o tambien llamados endpoints, para procesar u obtener datos
Por ejemplo usando URLs como estas, puedes obtener datos en formato JSON que puedes usarlos desde tus aplicaciones Cliente
Las REST APIs al ser simplemente HTTP, pueden ser usadas en cualquier tipo de aplicacion, ya sea desktop, CLis, moviles, aplicaciones de Hardware (Internet of Things), y por supuesto en aplicaciones web Frontend al dia de hoy.
Pero a medida que muchos servicios web populares empezaron a tener una cantidades de usuarios muy grandes, y por ende empezaron a diseñar sus sitemas a modo que puedan escalar facilmente, los desarrolladores de estos servicios encontraron que podria ser dificil usar REST a largo plazo.
Uno de estos en su epoca fue Facebook. el cual cuando su equipo de desarrollo decidio crear su primer aplicacion movil, se dieron cuenta que para optimizar las peticiones REST daria alguno problemas como
- UnderFetching
- OverFetching
Understanding
Underfetching significa que en una aplicacion podemos necesitar de multiples entidades o datos en un solo momento dado.
Pero debido al diseño de REST, en el que cada URL proporciona un conjunto de datos, es muy comun que en un aplicacion real hagamos varias peticiones para poder llegar a tener todos los datos que necesita nuestra aplicacion frontend.
es decir todo esto trata de no tener los suficientes datos en una sola llamada, obligandonos a tener que hacer más llamadas a la API.
OverFetching
por otro lado en REST tambien es posible obtener muchos datos cuando llamamos una URL y no utilizarl todos los datos de la respuesta. a esto se le conoce como OverFetching.
Lo que tambien significa que REST puede llegar a generar consultas pesadas en transito si al final el frontend no usa estos datos.
Ahora muchos podrian pensar, ok pero si optimizas tus consultas muy bien desde el backend, para que solo te de los datos que necesitas, a traves de queries, parametros y creacion de muchos endpoints puede resolverse esto mejor.
Y es que aquí esta el detalle si llegas a elaborar una porcion de codigo que optimice tus consultas, eventualmente llegaras a algo parecido en esencia a GraphQL.
¿Qué es GraphQL?
GraphQL tecnicamente, es un lenguaje de consultas que permite leer y mutar datos en APIs. Fue creado por Facebook inicialmente en el año 2012 como forma de resolver los problemas que te he mencionado y se publico como un proyecto Open Source en el año 2015, desde alli muchas empreass como Shopify, Twitter, Facebook, Paypal, Pinterest, y muchos más lo usan hasta la actualidad.
Ahora GraphQL a diferencia de REST es un lenguaje que a su vez necesita de herramientas que son usadas tanto en el Backend como en aplicaciones cliente, es decir que al final si necesitaras de instalar modulos relacionados con GraphQL en tus aplicaicones a diferencia de REST que solo necesitabas hacer peticiones HTTP y ya estaba.
GraphQL Desde el backend
GraphQL desde el backend un sistema de tipos de datos (Type System) en donde puedes describir un esquema de tus datos.
Por ejemplo esta es la descripcion de los datos que se pueden consultar respecto a un usuario.
type User {
id: ID!
username: String
email: String!
password: String
active: Boolean
}
El type es para crear nuestras entidades a consultar y lo que esta entre llaves que datos le pertenecen, ademas de describir de que tipo de datos son.
Esto permite que el Frontend o aplicaciones cliente en general que consuman la API, puedan tener la capacidad de explorar y solicitar exactamente los datos que necesitan.
Una sola URL
En GraphQL, en lugar de tener multiples URLs, solo tenemos una. que se usa tato para solicitar como recibir datos, esto es asi ya que el lenguaje permite modificar las consultas a gusto asi que no hay necesidad de denifir más rutas. Y se pueden recibir respuestas en formato JSON.
Esto hace que los desasrrolladores Frontend se enfoquen en crear consultas de los datos que necesitan, mientras que los desarrolladores backend se enfocan en crear código que resuelva estas consultas.
De hecho relacionado a esto de las consultas, graphql usa 3 terminos comunes para poder diferenciar las consultas al backend, estos son:
- Queries, las cuales permiten solicitar datos desde el cliente, esto seria equivalante a las peticiones GET
- Mutations, las cuales permiten que el cliente envie solicitudes al servidor para que modifiquen datos, esto seria equivalente a las peticiones POST, PUT, DELETE
- Subscritions, las cuales permiten mantener una conexion en tiempo real, basada en WebSockets.
Ademas Todas estas consultas que crees se autodocumentaran ya que al especificar el tipo de dato, es bastante facil saber que puedes o no hacer en la API.
GraphQL Clients
Y en cuanto a hacer consultas a diferencia de REST que se necesitan programas de terceros, GraphQL tambien ofrece una herramienta grafica llamada Graphiql, que permite probar tus APIs en desarrollo.
Aunque tambien puedes usarlo con Clientes como Postman.
Ahora Todo lo que te he mencionado se puede usar desde cualquier lenguaje de programacion que este enfocado en plataformas cliente (javascript, ios, Android) o en aplicaciones servidor (java, go, python, c#, rust) es por esto que si eres desarrollador web backend es bastante probable que te lo encontrues eventualmente.
Como probar APIS de GraphQL
Ejemplo de GraphQL Apis son:
- https://rickandmortyapi.com/graphql
- https://api.spacex.land/graphql/
- Pokemon API
- [Flruits api] https://fruits-api.netlify.app/graphql
Conclusión
En fin, GraphQL es una solucion de escalabilidad a proyecos backend muy grandes, si se te ha dificil entenderlo no es para preocuparse, porque si desarrollas proyecots web comunes, con cientos o miles de usaurios facilmente puedes lograr mantenerlo con REST APIS, pero si llegas a un punto de querer optimizar consultas o ampliarlo por ejemplo en una arquitectura de microservicios, enconraras que GraphQL es una solucion mucho más simple, así que no es como escoger solo REST o solo GraphQL, sino en la practia es primero aprender REST y luego GraphQL.
Ademas si eres un desarrollador web, conocer GraphQL puede llegar a ser batante util al darte una opcion mas de como crear codigo de backend o consumir datos desde multiples servicios en el frontend.
Y es que aqui no lo he comentado pero tambien hay multiples servicios que vienen por parte de empresas de la nube que permiten crear aplicaciones en minutos con un backend que ya ofrece un backend de GraphQL creado un par de ejemplos de estos serian AWS Amplify y Supabase, que son competencia directa de Firebase, pero esto es el siguiente video