Le tre opzioni dominanti sono REST (HTTP/JSON), gRPC (HTTP/2 + Protobuf) e code di messaggi (Kafka/RabbitMQ). REST e gRPC sono sincrone; le code sono asincrone.
Le tre opzioni dominanti sono REST (HTTP/JSON), gRPC (HTTP/2 + Protobuf) e code di messaggi (Kafka/RabbitMQ). REST e gRPC sono sincrone; le code sono asincrone.
| Aspetto | REST | gRPC | Code di messaggi |
|---|
| Stile | Sincrono | Sincrono | Asincrono |
| Payload | JSON (testo) | Protobuf (binario) | Qualsiasi (spesso binario) |
| Performance | Buona | Alta | Throughput elevato |
| Contratto | OpenAPI (loosely coupled) | .proto (rigoroso) | Schema/evento |
| Streaming | Limitato | Nativo (bidirezionale) | Pub/sub |
| Migliore per | API pubbliche, browser | Percorsi interni critici | Disaccoppiamento, eventi |
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)
Usare gRPC/REST sincroni ovunque ricrea l'accoppiamento stretto; usare l'asincrono per la lettura immediata dell'utente aggiunge latenza inutile.
La scelta del trasporto stabilisce l'accoppiamento e il limite di performance per ogni interazione, quindi scegliere caso per caso — non globalmente — è ciò che mantiene il sistema sia veloce che resiliente.
I sistemi maturi mescolano deliberatamente tutti e tre: gRPC su percorsi interni critici, REST al bordo e code per i flussi di lavoro.