Estrategias de Comunicación
Nivel intermedio — comparar REST, GraphQL, gRPC y mensajería con criterios objetivos, y decidir cuándo comunicación síncrona o asíncrona.
El problema
Situación típica: un equipo implementa GraphQL porque "evita over-fetching". Seis meses después: el 90% de las queries usan los mismos campos, nadie aprovecha la flexibilidad, pero todos sufren la complejidad de un servidor GraphQL con resolvers, DataLoaders y schemas. // resolver un problema que no tenías, a cambio de uno nuevo
4 protocolos
REST
Recursos sobre HTTP. Universal, cacheable, sin dependencias de cliente especial. Sufre over/under-fetching y el problema N+1.
| Usa REST si... | Evítalo si... |
|---|---|
| API pública para terceros | Comunicación interna de alto rendimiento |
| CRUD simple sobre recursos | Streaming de datos |
GraphQL
El cliente pide exactamente los datos que necesita, en una sola request. Schema tipado, pero complejidad en el servidor (resolvers, N+1, DataLoaders).
| Usa GraphQL si... | Evítalo si... |
|---|---|
| Múltiples clientes con necesidades distintas | API simple con recursos fijos |
| Over-fetching es un problema real medido | Equipo sin experiencia previa |
gRPC
Framework RPC de Google, Protocol Buffers binarios. Muy eficiente, tipado estricto, streaming bidireccional nativo — pero no funciona en browsers directamente y es difícil de debuggear.
| Usa gRPC si... | Evítalo si... |
|---|---|
| Comunicación interna entre servicios | API pública para terceros |
| Alto throughput, baja latencia, streaming | Clientes son browsers directos |
Mensajería (colas/topics)
Comunicación asíncrona vía broker (RabbitMQ, Kafka, SQS/SNS). Patrones: Point-to-Point (un consumidor), Pub/Sub (múltiples consumidores), Request/Reply.
| Úsala si... | Evítala si... |
|---|---|
| Operaciones pueden ser eventuales | Necesitas respuesta inmediata |
| Picos de carga impredecibles | Sistema simple sin fallos frecuentes |
Matriz comparativa
| Criterio | REST | GraphQL | gRPC | Mensajería |
|---|---|---|---|---|
| Latencia | Media | Media | Baja | Alta (async) |
| Throughput | Medio | Medio | Alto | Muy alto |
| Tipado | Opcional | Obligatorio | Obligatorio | Opcional |
| Browser support | Nativo | Nativo | Vía proxy | No |
| Streaming | SSE, WebSocket | Subscriptions | Nativo | Nativo |
| Acoplamiento | Temporal | Temporal | Temporal | Ninguno |
REST, GraphQL y gRPC comparten algo que la tabla oculta a simple vista: los tres son síncronos, así que el emisor espera respuesta — si el destino cae, el emisor lo nota de inmediato. Solo la mensajería rompe ese acoplamiento. Antes de elegir por latencia o tipado, pregúntate si tu sistema puede permitirse que un servicio caído tumbe al que lo llama.
Practica: e-commerce multi-componente
Sistema con: web app y mobile app (clientes), API Gateway, servicios de Orders, Catalog, Payments, Notifications, Inventory, integraciones con Stripe y SendGrid.
Diseña la estrategia de comunicación: qué protocolo usa cada conexión (cliente↔gateway, gateway↔servicios, servicio↔servicio, integraciones externas) y justifica cada elección con la matriz.