gRPC-web es una especificación y un conjunto de herramientas que permite a las aplicaciones frontend basadas en navegador interactuar con servicios gRPC. A diferencia del gRPC estándar, que requiere HTTP/2 y tiene requisitos específicos de framing de mensajes que no son directamente accesibles desde el navegador, gRPC-web actúa como un proxy o gateway. Este proxy traduce las solicitudes gRPC del navegador (que utilizan HTTP/1.1 o HTTP/2 con un formato compatible con el navegador) a solicitudes gRPC estándar para el backend, y viceversa. Utiliza Proxies como Envoy o un gRPC-web proxy dedicado para manejar esta traducción, permitiendo el uso de Protocol Buffers para la serialización y la generación de código cliente/servidor fuertemente tipado en entornos web.
En el mundo real, gRPC-web es utilizado por empresas y proyectos que buscan aprovechar los beneficios de gRPC (rendimiento, eficiencia, tipado fuerte) en sus aplicaciones web. Por ejemplo, plataformas que construyen microservicios con gRPC en el backend pueden exponer APIs a sus frontends React, Angular o Vue.js utilizando gRPC-web. Herramientas como Envoy Proxy tienen soporte nativo para gRPC-web, facilitando su integración en arquitecturas de microservicios existentes. Proyectos de código abierto y startups que priorizan la eficiencia de la red y la consistencia del contrato de API entre sus servicios internos y sus clientes web son usuarios típicos de gRPC-web.
Para un arquitecto, gRPC-web es crucial porque permite extender la eficiencia y el rigor de gRPC a la capa de presentación web, eliminando la necesidad de mantener APIs RESTful separadas o gateways de traducción manual. Esto reduce la complejidad, mejora la consistencia del contrato de API y puede optimizar el rendimiento de la red, especialmente con payloads grandes o streaming. Sin embargo, introduce la necesidad de un proxy (como Envoy) en el camino de la solicitud, lo que añade un componente adicional a la infraestructura y posibles puntos de fallo o latencia. La decisión de adoptar gRPC-web implica evaluar el trade-off entre la complejidad de infraestructura adicional y los beneficios en rendimiento, tipado fuerte y coherencia de la API en un ecosistema de microservicios.