As três opções dominantes são REST (HTTP/JSON), gRPC (HTTP/2 + Protobuf) e filas de mensagens (Kafka/RabbitMQ). REST e gRPC são síncronos; filas são assíncronas.
As três opções dominantes são REST (HTTP/JSON), gRPC (HTTP/2 + Protobuf) e filas de mensagens (Kafka/RabbitMQ). REST e gRPC são síncronos; filas são assíncronas.
| Aspecto | REST | gRPC | Message Queue |
|---|
| Estilo | Sínc | Sínc | Assínc |
| Payload | JSON (texto) | Protobuf (binário) | Qualquer (frequentemente binário) |
| Desempenho | Bom | Alto | Alta taxa de transferência |
| Contrato | OpenAPI (solto) | .proto (rígido) | Schema/event |
| Streaming | Limitado | Nativo (bidi) | Pub/sub |
| Melhor para | APIs públicas, navegadores | Caminhos internos críticos | Desacoplamento, eventos |
service OrderService {
// strongly-typed RPC, generated client + server stubs
rpc GetOrder (OrderId) returns (Order);
}
message OrderId { string id = 1; }
message Order { string id = 1; double total = 2; }
Order Service ─publish→ [ "OrderPlaced" topic ] ─▶ Inventory
└────▶ Notifications
(producer doesn't know or wait for consumers)
Usar gRPC/REST síncronos em todos os lugares recria acoplamento rígido; usar assíncrono para leitura imediata de um usuário adiciona latência desnecessária.
A escolha de transporte define o acoplamento e o teto de desempenho para cada interação, então escolher por caso de uso — não globalmente — é o que mantém o sistema rápido e resiliente.
Sistemas maduros deliberadamente combinam os três: gRPC em caminhos internos críticos, REST na borda e filas para fluxos de trabalho.