loading experience

ASP.NET Core

gRPC in .NET: comunicazione veloce tra servizi

Contratti definiti con Protocol Buffers, messaggi binari compatti e streaming: quando gRPC conviene rispetto a REST.

gRPC in .NET: comunicazione veloce tra servizi

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.

Spesso si usano entrambi: REST verso l'esterno, gRPC tra i servizi.
Spesso si usano entrambi: REST verso l'esterno, gRPC tra i servizi.

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.

Lascia un commento