REST vs gRPC: ¿cuál es la mejor opción para tu API?
Las arquitecturas REST y gRPC sirven para comunicar infraestructuras de microservicios. ¿Para qué funciona mejor cada una?

Foto de Danial Igdery en Unsplash
Las arquitecturas REST y gRPC sirven para comunicar infraestructuras de microservicios. ¿Para qué funciona mejor cada una?
Foto de Danial Igdery en Unsplash
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.
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).
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.
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.
Ambas arquitecturas pueden ser usadas para comunicar infraestructuras de microservicios:
Es una opción popular para sistemas de poca o mediana complejidad:
Es una opción para sistemas políglotas o de alto rendimiento:
É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.
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.
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.