commit&push

~/blog $ git show 2025-10-08

gRPC vs REST: debugging, observabilidad y la realidad de la adopción

· 4 min de lectura · Victor Benavides

Para muchos desarrolladores, REST se ha vuelto una segunda naturaleza. Está tan ampliamente adoptado que se siente menos como una elección y más como el default. Con REST y JSON, debuggear suele ser tan simple como abrir una pestaña del navegador, pegarle a un endpoint con curl o levantar Postman. La respuesta es legible, amigable para humanos, y te dice al instante dónde salieron mal las cosas. Esa simplicidad, junto con un soporte casi universal en herramientas y frameworks, es la razón por la que REST creció hasta ser el estándar de facto de la comunicación web.

Sin embargo, cuando entras al mundo de gRPC, la historia cambia. En el papel, gRPC resuelve varios problemas con los que REST batalla. Es eficiente, type-safe y diseñado con los microservicios modernos en mente. Pero en la práctica, muchos desarrolladores que lo han usado pueden contar historias de códigos de error crípticos y horas perdidas persiguiendo problemas que al final se reducían a un desajuste sutil en una definición de proto. Yo personalmente he estado en esas situaciones donde un vago "status 13" me tuvo escarbando por horas, solo para descubrir al final que el verdadero culpable era un contrato roto. Ese tipo de frustración no es rara — es parte de la curva de aprendizaje de gRPC.

Uno de los ejemplos más memorables de mi propio trabajo involucró una propiedad en un mensaje de protobuf que empezó a mostrar cadenas de texto extrañas al convertirse en objetos en Nest.js. Al principio, nada lanzaba un error. El servicio seguía corriendo, los mensajes seguían fluyendo y todo se veía bien en la superficie. Pero los datos no tenían sentido. Después de horas de investigación, descubrimos que se había saltado un solo número de campo en el contrato de protobuf. En lugar de incrementar de tres a cuatro, un desarrollador saltó de tres a cinco. Ese pequeño error fue suficiente para romper la traducción binaria del mensaje completo. A partir de ese punto, el mapeo del objeto quedó corrupto, produciendo basura en las propiedades. En REST, un campo faltante o desajustado habría sido obvio en el payload JSON. En gRPC, tomó horas de trabajo detectivesco solo entender qué estaba pasando.

Esta diferencia en la experiencia de desarrollo no es solo una incomodidad. Con REST, el proceso de debugging se siente transparente. Puedes:

  • Ver requests y responses en texto plano.
  • Loggearlos fácilmente y compartirlos con tus compañeros.
  • Inspeccionar payloads sin herramientas ni capas extra.

gRPC, en contraste, esconde su comunicación dentro de un protocolo binario. Si quieres visibilidad, necesitas agregar interceptores, logging custom, correlation IDs o pipelines completos de observabilidad con OpenTelemetry, Jaeger o Application Insights. Sin esas capas en su lugar, gRPC se siente más como una caja negra que como un canal de comunicación.

El problema va más allá del debugging. La observabilidad, que se ha vuelto una piedra angular de construir sistemas resilientes, es mucho más difícil de lograr con gRPC a menos que inviertas en infraestructura para soportarla. REST hace trivial capturar un request y un response. Con gRPC, tienes que planear con cuidado cómo exponer metadata, trace IDs y mensajes serializados de una forma que los humanos realmente puedan usar. Hasta que lo hagas, los errores suelen apuntar a ninguna parte, dejándote a ti y a tu equipo buscando pistas en la oscuridad.

Y aquí es donde entran los retos de adopción. Desde la perspectiva de una empresa, REST no es solo más simple — es más seguro. Un desarrollador junior puede debuggear una API REST el primer día casi sin entrenamiento extra. Con gRPC, ese mismo desarrollador es más propenso a toparse con obstáculos frustrantes que requieren la guía de un ingeniero senior. Si esos seniors no tienen el tiempo o el ancho de banda para mentorear, equipos enteros pueden estancarse.

Las consecuencias son predecibles:

  • Las empresas evitan el cambio porque el costo de adopción es alto.
  • Los juniors se frustran más rápido, frenando el progreso general.
  • Los seniors pasan el tiempo apagando incendios en lugar de construir.
  • Los líderes ven más costo a corto plazo que beneficio.

He visto organizaciones ansiosas por modernizarse con gRPC que se echaron para atrás después de unos meses, no porque gRPC no fuera poderoso, sino porque la frustración pesó más que las ganancias percibidas. Esta dinámica crea una paradoja. gRPC puede ofrecer ventajas reales en performance, type safety y escalabilidad, pero el camino para obtener esos beneficios es empinado y requiere una inversión deliberada en tooling y liderazgo senior. REST, en comparación, sigue prosperando porque reduce la fricción en cada etapa: onboarding, debugging, colaboración y monitoreo. Las empresas suelen elegir REST no porque sea la opción más avanzada, sino porque es la más confiable y la menos disruptiva para sus equipos.

La lección más amplia aquí es que la tecnología nueva no gana solo por ser técnicamente superior. Gana cuando reduce la fricción, cuando hace a los desarrolladores más productivos en todos los niveles de experiencia, y cuando les permite a los equipos entregar sin quemar ciclos persiguiendo errores crípticos. REST se volvió el estándar no porque fuera perfecto, sino porque era lo suficientemente simple para ser universal. gRPC bien puede ser el futuro, pero hasta que iguale a REST en usabilidad y observabilidad, la adopción seguirá siendo más lenta de lo que sus defensores esperan.

Al final, el debate entre REST y gRPC no se trata realmente de cuál es mejor en el papel. Se trata de cuál les hace más fácil a los equipos reales, en empresas reales, sacar el trabajo adelante. REST hace eso más fácil hoy. gRPC nos exige ser intencionales, disciplinados y estar bien preparados antes de que rinda frutos.