POR ALEJANDRO ORTEGA / SOFTWARE ENGINEER
En el ambiente de las aplicaciones web existen varias formas para crear una Interfaz de Programación de Aplicaciones (API): entre ellas destacan las Representational State Transfer (REST) y Google Remote Procedure Call (gRPC), dos tecnologías de comunicación sobre el Protocolo de Transferencia de Hipertexto (HTTP).

En la actualidad digital, las API son un puente para la comunicación entre diferentes aplicaciones. En este sentido, durante el diseño de un sistema distribuido, microservicios o cualquier sistema con necesidad de un componente de intercambio de datos, los desarrolladores deben considerar la implementación de métodos de comunicación efectiva.

¿Qué es REST?

El REST es un enfoque de arquitectura de software muy popular y una definición de una serie de reglas para intercambiar información de forma unidireccional en formato de texto entre aplicaciones mediante el protocolo HTTP (estándar de la web). También, basada en la arquitectura cliente-servidor, una API REST identifica los recursos del servidor mediante diferentes Uniform Resource Location (URL), conocidos como puntos de conexión (endpoints), y administra sus recursos mediante los verbos HTTP: GET, POST, PUT, DELETE. Cada petición recibe una respuesta con un código de estado y suele incluir información en formatos como JavaScript Object Notation (JSON) o Extensible Markup Language (XML).

¿Qué es gRPC?

Una gRPC es una arquitectura y sistema de código abierto creado por Google (razón de la “g” en su nombre) y gobernado por Cloud Native Computing Foundation (CNCF). Representa una nueva implementación del antiguo protocolo RPC.

Un sistema RPC se define sobre la arquitectura cliente-servidor: en ella el cliente envía solicitudes con parámetros a un servidor para la ejecución de funciones mediante una comunicación HTTP, TCP o UDP.

En un sistema gRPC se extiende RPC con la utilización de búferes de protocolos o Protobuf (un lenguaje de definición intermedio), generadores de código y HTTP 2 para la transmisión unidireccional y bidireccional de información en formato binario. Otra característica relevante de gRPC es la abstracción en la etapa de comunicación al momento de invocar las funciones remotas, lo que da la ilusión de invocar una función local.

Nota: HTTP es el protocolo principal para la web. Existen diferentes versiones de este protocolo. Una API con gRPC siempre usará HTTP 2, mientras que con REST se utilizará HTTP 1.1. Aunque comparten el mismo protocolo de base, HTTP 2 no es compatible con todos los navegadores a pesar de su estandarización en 2015.

Comparación

JSON y XML son las opciones más populares a la hora de hacer un API REST o RPC, en especial JSON, por su flexibilidad y neutralidad ante diferentes lenguajes y plataformas, aunque pueden llegar a ser molestos e incluso lentos durante su uso.

En cambio, gRPC usa Protobuf, un formato neutral preparado para ayudar a la codificación y la decodificación rápida de la información en un formato binario altamente comprimido. La transmisión de información mediante gRPC y Protobuf es más rápida que con REST y JSON o XML.

Los tiempos de implementación de ambos tipos de API es un factor a considerar. Debido a que gRPC no es una tecnología tan popular como REST, no existen muchas herramientas o marcos de trabajo que aceleren la implementación. Por otra parte, se puede implementar una API REST en alrededor de 10 minutos.

Los servicios API con gRPC usan su propio compilador (Protoc Compiler) para generar código propio de la aplicación. De esta manera se obtienen diferentes implementaciones de gRPC (útil a la hora de implementar aplicaciones cliente) en varios lenguajes de programación.

REST no cuenta con herramientas de generación de código, por lo que debe usar herramientas externas como Swagger para garantizar la creación de clientes en múltiples lenguajes.

El flujo de comunicación es una gran diferencia entre ambas arquitecturas. Una API basada en gRPC administrar conexiones de streaming bidireccional, así que el cliente y el servidor pueden enviar y recibir información simultáneamente durante una sola conexión. Una API REST no puede reproducir esta característica.

¿Cuándo usar cada uno?

Ambas arquitecturas pueden ser usadas para comunicar infraestructuras de microservicios:

REST

Es una opción popular para sistemas de poca o mediana complejidad:

  • Para desarrollar e iterar sobre sistemas rápidamente, gracias al gran número de herramientas existentes y bajos tiempos de implementación.
  • Permite realizar comunicaciones con poca complejidad.
  • Ayuda a lograr un alto índice de compatibilidad con aplicaciones del lado del cliente (aplicaciones web y móviles).
  • Obtener mayor legibilidad de la información comunicada

gRPC

Es una opción para sistemas políglotas o de alto rendimiento:

  • Sistemas que manejan grandes cargas de datos.
  • Sistemas en tiempo real o streaming.
  • Atención a diferentes sistemas escritos en varios lenguajes de programación.
  • APIs que no varían mucho en el tiempo.
  • Operaciones en redes de pocos recursos como el Internet de las cosas (IoT).

Ésta es una muy buena opción cuando se quiere implementar streaming, transmisión de llamadas y videos en vivo, datos financieros en tiempo real, monitoreo y comunicación con otros dispositivos/softwares, mensajería instantánea y procesamiento de grandes volúmenes de datos.

gRPC en HTech

Las operaciones digitales de HTech funcionan sobre una arquitectura de microservicios. Esto significa que cada servicio debe interactuar con otros para completar los flujos de trabajo activados, pero no siempre serán con servicios propios de la empresa.

Debido a la situación anterior se implementaron aplicaciones tipo API Gateway para comunicar los servicios internos con servicios externos a través de una interfaz única, centralizada e intuitiva. Algunas de estas aplicaciones de tipo API Gateway utilizan gRPC como medio de comunicación con las aplicaciones internas, ya que son aplicaciones de alto tráfico de usuarios, con flujos de muy poco cambio y para aprovechar las bondades inherentes al modo de comunicación como una herramienta para responder al volumen de solicitudes.

Para comunicar con estos servicios se utilizan módulos clientes que ocultan la complejidad de la comunicación subyacente (ya sea HTTP o gRPC), reduciendo cada llamada a simples funciones. Esto permite una mayor facilidad de integración de servicios y velocidad de desarrollo durante la implementación de nuevos servicios.

Conclusión

Las API de tipo REST y gRPC son conocidas y utilizadas en desarrollos de software moderno, aunque existe una gran diferencia en cuanto a su adopción, siendo REST la primera opción de muchos desarrolladores.

REST cuenta con una implementación fácil, rápida y con formatos de datos flexibles (XML y JSON), mientras que gRPC ofrece un mayor rendimiento a costo de una mayor complejidad en la implementación inicial y un formato de datos más rígido (Protobuf).

Ambas tecnologías tienen sus casos de usos destacados, por lo que elegir una tecnología u otra depende de las necesidades del software en cuestión pero, en conjunto, tienen la capacidad de construir sistemas eficientes y escalables capaces de responder a las demandas de la era digital.