gRPC è un framework di chiamate remote basato su HTTP/2 e Protocol Buffers. I messaggi sono binari, compatti e veloci da serializzare, e il contratto tra client e server è definito in un file condiviso.
Il contratto
syntax = "proto3";
option csharp_namespace = "Magazzino";
service Giacenze {
rpc Disponibilita (RichiestaDisponibilita) returns (RispostaDisponibilita);
rpc Movimenti (RichiestaMovimenti) returns (stream Movimento);
}
message RichiestaDisponibilita { string codice = 1; }
message RispostaDisponibilita { string codice = 1; int32 quantita = 2; }
message RichiestaMovimenti { string codice = 1; }
message Movimento { string data = 1; int32 delta = 2; }
Dal file .proto vengono generate automaticamente le classi C# per client e server.
Il server
public class GiacenzeService(IMagazzino magazzino) : Giacenze.GiacenzeBase
{
public override async Task<RispostaDisponibilita> Disponibilita(
RichiestaDisponibilita req, ServerCallContext ctx)
{
var q = await magazzino.QuantitaAsync(req.Codice, ctx.CancellationToken);
return new RispostaDisponibilita { Codice = req.Codice, Quantita = q };
}
}
builder.Services.AddGrpc();
app.MapGrpcService<GiacenzeService>();
Quando sceglierlo
- Comunicazione tra servizi interni, dove prestazioni e contratti rigidi contano.
- Streaming di dati in una o entrambe le direzioni.
- Client in linguaggi diversi: lo stesso file .proto genera codice per molti linguaggi.
Quando restare su REST
Per API pubbliche consumate da browser e da terze parti, REST con JSON resta più semplice da esplorare e da integrare. I browser non parlano gRPC nativo: serve gRPC-Web o un gateway. Molte architetture usano entrambi: REST verso l'esterno, gRPC tra i servizi interni.
Commenti (0)
Nessun commento ancora.