GraphQL: evolución del diseño de API’s
INFRAESTRUCTURA, OPERACIONES.Continuamos con nuestra serie de las mejores prácticas para el desarrollo de aplicaciones distribuidas y microservicios y en esta oportunidad le dedicamos la entrada de nuestro blog a GraphQL.
Cada vez más empresas y aplicaciones están aprovechando las ventajas que ofrece GraphQL, un lenguaje de consulta de datos. ¿De qué se trata y cuáles son los principales beneficios que lo están convirtiendo en tendencia a nivel global?
¿Qué es GraphQL?
GraphQL es un protocolo de consulta de datos originalmente elaborado por Facebook para uso interno. Desde 2015 existe en una versión open source que ha impulsado su desarrollo y que ha generado muchas ventajas y beneficios prácticos.
Si está familiarizado con el funcionamiento de las aplicaciones, sabrá que los protocolos de consulta de datos son esenciales para obtener toda clase de reportes e información. REST es el mecanismo más utilizado, pero ahora GraphQL ha surgido como una alternativa que pretende adaptarse mejor a las necesidades actuales.
El objetivo esencial de GraphQL es ofrecer a los clientes una forma más directa, sencilla y eficiente para obtener exactamente los datos que requieren, a través de un protocolo potente y dinámico.
Comunidad creciente
La apertura del código ha permitido que en pocos años GraphQL haya alcanzado un gran desarrollo a nivel mundial. Hoy en día se ha consolidado una comunidad cada vez más grande que participa creando guías y tutoriales para su uso, así como también herramientas para elaborar API's con gran facilidad.
La versión estable más reciente fue lanzada en Octubre de 2016 y a partir de entonces se han venido incorporando nuevas especificaciones. Una de las más importantes se adhirió de forma oficial en febrero de 2018: el Schema Definition Language (SDL).
Seguramente lo ha usado
Si ha utilizado Facebook, ya ha utilizado GraphQL al menos como usuario, posiblemente sin saberlo. Además, su expansión ha permitido también que cientos de apps y empresas están adoptando este protocolo como base para sus consultas, incluyendo por ejemplo a Shopify, Twitter, Yelp, Coursera, Drupal e incluso medios de comunicación como el New York Times, el Financial Times y 20 minutos, entre muchos otros.
Gran compatibilidad
GraphQL no es una librería ni un framework, se trata de un lenguaje de consulta que puede ser utilizado indistintamente en diferentes códigos de programación, incluidos algunos de los más usados hoy en día como JavaScript, Ruby, Java, PHP y Python.
Aunque originalmente no ofrece muchos recursos en el backend, está diseñado para generar resultados que sean fácilmente interpretados por humanos.
Simplifica las consultas
A diferencia de REST, que requiere hacer un llamado para cada consulta de datos, en GraphQL se utiliza una solicitud única, a través de la cual se puede acceder a información de diferentes tablas o bases de datos.
Esto es importante, pues no sólo se traduce en un entorno más directo y simple, sino que también ahorra el consumo de una gran cantidad de recursos, que muchas veces resultan necesarios a través de entornos como REST.
Mientras que REST sólo ofrece un sistema de consultas ad-hoc, con GraphQL se tiene un esquema de capas más limpio y directo para la conexión entre servidores y clientes.
Exactamente los datos que necesita y nada más
En REST, es común que tengamos que enfrentarnos a problemas como la sobre-recuperación de datos, es decir, recibir más información de la que realmente necesitamos, ya que resulta más complicado obtener sólo algunos campos en concreto. Esto implica un excesivo consumo de ancho de banda y, en consecuencia, un mayor tiempo de respuesta.
Por ejemplo, si queremos saber el primer apellido de un grupo de usuarios, pero resulta que está el nombre completo en un mismo campo, REST nos entrega el nombre completo y después tenemos que filtrar el apellido, lo que resulta poco eficiente.
Otro problema común, no solo de REST sino también de otros entornos como Soap, es la sub-recuperación o el famoso “underfetching”, es decir, recibir menos información de la que necesitamos.
Por ejemplo, tenemos una base de datos con la información de los empleados y queremos saber nombres y tipos de contrato. Si una sola instrucción no genera esta información, se tienen que elaborar para cada campo diversas llamadas y, si en caso de que se necesiten cientos de campos, estas se multiplican de forma exorbitante.
GraphQL pretende optimizar estas funciones a través de parámetros que permiten generar de forma más directa y específica, a partir de llamadas únicas, todos los datos que se requieren.
Facilita la vida a los desarrolladores
GraphQL también está diseñado para ordenar el caos en la manipulación de API's, a través de un protocolo bien definido que cualquier ingeniero puede fácilmente aprender a manejar en unos cuantos minutos.
A través de este entorno se evitan complicaciones como el hecho de tener que generar la documentación para el funcionamiento de la API o tener que invertir demasiado tiempo en entender cómo se estructuran sus procedimientos.
Esto ha permitido a las empresas reducir los costos de desarrollo, así como acelerar el proceso de realización, lo que se traduce en una mayor productividad.
Esquema sólido
Uno de los retos más comunes para desarrolladores era el hecho de enfrentarse a documentación de API's obsoletas, donde los parámetros de control no eran claros. Por el contrario, una de las principales cualidades de GraphQL es que se cuenta con un esquema muy sólido, confiable y bien definido que permite tener el control de las configuraciones.
Hay 3 operaciones principales o Querys: las consultas a la API, las mutaciones (que son funciones que realizan modificaciones y mandan una respuesta) y las suscripciones (que permiten recibir los datos de los cambios en el servidor). Todo esto se realiza bajo los parámetros bien definidos del SDL.
Composición de API's
Otro problema común para los desarrolladores ocurre cuando se tiene más de un cliente para un mismo proyecto. Por ejemplo, una estructura para iOS, otra para Android y otra para la web. Sin embargo, gracias a la compatibilidad y capacidad multisistema de GraphQL es posible conectar información y comunicar resultados desde diferentes entornos.
La unión de esquemas, o “Schema stitching”, de GraphQL permite conectar y combinar múltiples APIs para formar una sola interfaz en el backend, lo cual resulta muy útil cuando queremos conectarnos con APIs de terceros, como Shopify, Github y otros, pues podemos delegar o combinar información y extraer datos de todas estas interfaces.
Como se puede ver, hay muchos motivos por los que GraphQL es un protocolo que no sólo es fuerte actualmente, sino que también tiene una buena proyección hacia el futuro. Aunque anteriormente Rest tenía un papel claramente predominante en el mercado, el crecimiento y la expansión en el uso del lenguaje creado por Facebook no sólo se está convirtiendo en tendencia, sino que probablemente en poco tiempo será el método principal para la obtención de información debido a su funcionalidad y capacidad de adaptarse a las tecnologías y necesidades de hoy.
Si su organización tiene interés en implementar proyectos con GraphQL de la mano de expertos, lo invitamos a contactarnos.