La batalla de las API: Rest, GraphQL y gRPC

Pavel Alexander Vásquez Flores

Estudiante de Ingeniería en Ciencias y Sistemas - USAC

Palabras Clave:
API, RPC, rest, Query language, protocolo, verbo.

En la actualidad el uso de apis es muy común, la mayoría de las aplicaciones las utiliza. Pero ¿para qué? o mejor dicho, ¿Qué es una interfaz de programación de aplicaciones (API)?

Api es un conjunto de funciones que cumplen con un objetivo, como por ejemplo: la obtención de información o la inserción de información a una base de datos. Un beneficio directo de utilizar apis es la flexibilidad que ofrecen, ya que puede utilizarse desde una aplicación móvil o desde una aplicación de escritorio.

Actualmente el mundo de las apis es dominado por Rest, aunque las nuevas tecnologías como GraphQL y gRPC cada vez ganan más espacio. A continuación se da una breve explicación de cada una de estas:

Rest: es un estilo de arquitectura de software utilizado para describir cualquier interfaz entre diferentes sistemas que utilicen HTTP para comunicarse. El término significa transferencia de estado representacional, lo que quiere decir que entre dos llamadas cualquiera, el servicio no guarda los datos [1].

GraphQL: es relativamente nuevo. Fue desarrollado por Facebook y lanzado en 2015. Es un lenguaje de consultas en el cual basta definir un modelo, y basándose en una consulta se obtiene la información requerida.

Imagen 1: Características de rest, graphql y grpc. Fuente: Elaboración Propia

gRPC: está basado en la tecnología remote procedure call. Google presenta gRPC una tecnología enfocada en la rápida transferencia de información especialmente utilizada para realizar streaming. El funcionamiento básico de esta tecnología es el envío de mensajes a través de métodos, los mensajes se envían como binarios por lo que son más sencillos y ligeros de enviar.

Sabidos de la existencia de varias tecnologías para implementar apis, surge la pregunta:

¿Cuál es mejor?

Luego de observar las características mostradas en la tabla anterior se puede notar que el protocolo http está presente en todas. Algo muy importante acerca de esto, es que la versión http/2 es la más reciente y a su vez la más rápida, que gRPC la utilice por defecto puede ser un aliciente para elegirla como la mejor.

A continuación se analizan las características de cada una de estas tecnologías:

Rest utiliza los verbos que proporciona http desde su versión 1.1, por lo tanto durante su implementación se deben controlar las acciones que se permitirán a api, que pueden ser: obtener, insertar, actualizar o eliminar información, otro punto importante es que rest normalmente maneja sus peticiones enviando en el cuerpo de la petición texto en formato json, esto hace que el payload del servicio sea mayor, por lo tanto consume más ancho de banda y además es muy posible que se necesiten múltiples peticiones para formar una vista, lo que se verá reflejado en la aplicación en términos de rendimiento.

Pero no todo es tan malo como parece, la implementación de un servicio utilizando rest es tan sencilla por lo cual es el más utilizado actualmente. La documentación que existe es tan amplia que pareciera que no existiese otra tecnología para generar apis, esto se debe a que los frameworks de los distintos lenguajes han evolucionado para hacer las cosas más sencillas y rest se ha beneficiado con estos cambios.

GraphQL esta tecnología puede asociarse con sql por su lenguaje de consultas, pero debe mencionarse que son cosas distintas. GraphQL es una solución que a diferencia de rest busca obtener la información exactamente como la necesitamos, pero ¿a qué se refiere esto? Véase el siguiente ejemplo:

Imagen 2: Ejemplo de request en rest. Fuente: Elaboración Propia

Puede apreciarse toda la información devuelta para hacer un simple inicio de sesión, pero ¿en realidad se necesita toda esa información? Claro que no, como mucho se necesita el id de usuario, token, nombres y demás campos que si sean importantes, pero no todos. Con graphQL esto cambia como se muestra en el siguiente ejemplo:

Imagen 3: Ejemplo de petición en graphql. Fuente: Elaboración Propia

La diferencia es notable; se obtiene exactamente lo que se solicita y en eso es que se basa graphQL, en retornar exactamente lo que se solicita reduciendo considerablemente el payload permitiendo ahorrar ancho de banda, con lo cual es evidente que graphQL tiene ventajas respecto a rest.

gRPC esta tecnología no es tan conocida como las anteriores, pero tiene mucho que ofrecer, inicialmente debe observarse que trabaja con la versión http/2.0 y protobufs. http/2.0 es menos detallado en comparación con http/1.1 gracias a la alta compresión de los encabezados y es compatible con la multiplexación de múltiples solicitudes en una sola conexión.

Los protobufs, a diferencia de JSON, fueron diseñados para ser compactos y eficientes para que las computadoras los analicen.

El resultado es que gRPC puede reducir el uso de recursos, lo que resulta en tiempos de respuesta más bajos en comparación con el uso de REST y JSON. Esto también significa uso reducido de la red y mayor duración de la batería para los clientes que los ejecutan en dispositivos móviles.

Una de las "características principales" de gRPC es el streaming bidireccional full-duplex. Si bien la gran mayoría de las llamadas a procedimientos remotos (RPC) serán operaciones simples "unarias" (solicitud simple y respuesta única), a menudo hay casos en los que se requiere algo más sofisticado. Ya sea por su afinidad, las facilidades de inserción del servidor para enviar notificaciones, o algo más complicado, se puede hacer usando secuencias de gRPC.[2]

Véase un ejemplo de gRPC para un login:

Imagen 4: Ejemplo de request en grpc. Fuente: Elaboración Propia

Se observa la facilidad de gRCP, pero toda lógica se encuentra dentro de los protobufs, por lo que solo se necesita invocarlos para obtener una respuesta en base a los parámetros enviados.

A diferencia de rest y graphQL, gRPC les lleva mucha ventaja, ya que envía un binario y la transferencia es considerablemente más rápida.

Donde podemos utilizar gRPC?

  • Microservicios
  • Aplicaciones cliente servidor
  • Integraciones y apis
  • Aplicaciones web basadas en el navegador

¿Por lo tanto, cual es mejor?

Esta pregunta depende de las necesidades del negocio, pero en términos generales gRPC aunque en este momento aún no pueda afirmarse que sea no sea la mejor, pues aún necesita mejorar ciertos aspectos que las otras tecnologías ya han consolidado, en el futuro va a superar a rest y graphQL.

Conclusiones

  1. El desarrollo de reconocimiento de patrones está aumentando rápidamente; y los campos relacionados y las aplicaciones desarrolladas cada vez son más amplias.

  2. Los patrones varían según el estímulo que reconocen pudiendo ser: visuales, sonidos, señales, clima, etc. Los modelos para detectarlos pueden desarrollarse para entender los patrones generando conocimiento a partir de datos sin sentido.

  3. El reconocimiento de patrones incluye varios métodos, cada uno aplicable a una amplia variedad de campos, cuyo fin en común es emular la inteligencia humana para delegar a máquinas tareas sencillas pero costosas para el ser humano.

Referencias