Testare i servizi gRPC con gRPCurl e gRPCui in ASP.NET Core
Nota
Questa non è la versione più recente di questo articolo. Per la versione corrente, vedere la versione .NET 9 di questo articolo.
Avviso
Questa versione di ASP.NET Core non è più supportata. Per altre informazioni, vedere i criteri di supporto di .NET e .NET Core. Per la versione corrente, vedere la versione .NET 9 di questo articolo.
Importante
Queste informazioni si riferiscono a un prodotto non definitive che può essere modificato in modo sostanziale prima che venga rilasciato commercialmente. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Per la versione corrente, vedere la versione .NET 9 di questo articolo.
Gli strumenti sono disponibili per gRPC che consente agli sviluppatori di testare i servizi senza compilare app client:
- gRPCurl è uno strumento da riga di comando open source che fornisce l'interazione con i servizi gRPC.
- gRPCui si basa su gRPCurl e aggiunge un'interfaccia utente Web interattiva open source per gRPC.
Questo articolo illustra come:
- Configurare la reflection del server gRPC con un'app gRPC ASP.NET Core.
- Interagire con gRPC usando gli strumenti di test:
- Individuare e testare i servizi gRPC con
grpcurl
. - Interagire con i servizi gRPC tramite un browser usando
grpcui
.
- Individuare e testare i servizi gRPC con
Nota
Per informazioni su come eseguire unit test dei servizi gRPC, vedere Testare i servizi gRPC in ASP.NET Core.
Configurare la reflection gRPC
Gli strumenti devono conoscere il contratto Protobuf dei servizi prima di poterli chiamare. A questo scopo è possibile procedere in due modi:
- Configurare la reflection gRPC nel server. Gli strumenti, ad esempio gRPCurl, usano la reflection per individuare automaticamente i contratti di servizio.
- Aggiungere
.proto
file allo strumento manualmente.
È più facile usare la reflection gRPC. La reflection gRPC aggiunge un nuovo servizio gRPC all'app che i client possono chiamare per individuare i servizi.
gRPC ASP.NET Core include il supporto predefinito per la reflection gRPC con il Grpc.AspNetCore.Server.Reflection
pacchetto. Per configurare la reflection in un'app:
- Aggiungere un riferimento al
Grpc.AspNetCore.Server.Reflection
pacchetto. - Registrare la reflection in
Program.cs
:AddGrpcReflection
per registrare i servizi che abilitano la reflection.MapGrpcReflectionService
per aggiungere un endpoint del servizio reflection.
builder.Services.AddGrpc();
builder.Services.AddGrpcReflection();
var app = builder.Build();
app.MapGrpcService<GreeterService>();
IWebHostEnvironment env = app.Environment;
if (env.IsDevelopment())
{
app.MapGrpcReflectionService();
}
Quando viene configurata la reflection gRPC:
- Un servizio di reflection gRPC viene aggiunto all'app server.
- Le app client che supportano la reflection gRPC possono chiamare il servizio reflection per individuare i servizi ospitati dal server.
- I servizi gRPC vengono comunque chiamati dal client. La reflection abilita solo l'individuazione dei servizi e non ignora la sicurezza lato server. Gli endpoint protetti dall'autenticazione e dall'autorizzazione richiedono al chiamante di passare le credenziali affinché l'endpoint venga chiamato correttamente.
Sicurezza del servizio Reflection
La reflection gRPC restituisce un elenco di API disponibili, che potrebbero contenere informazioni riservate. Prestare attenzione a limitare l'accesso al servizio di reflection gRPC.
La reflection gRPC è in genere necessaria solo in un ambiente di sviluppo locale. Per lo sviluppo locale, il servizio reflection deve essere mappato solo quando IsDevelopment restituisce true:
if (env.IsDevelopment())
{
app.MapGrpcReflectionService();
}
L'accesso al servizio può essere controllato tramite metodi standard ASP.NET di estensione dell'autorizzazione Core, ad esempio AllowAnonymous
e RequireAuthorization
.
Ad esempio, se un'app è stata configurata per richiedere l'autorizzazione per impostazione predefinita, configurare l'endpoint di reflection gRPC con AllowAnonymous
per ignorare l'autenticazione e l'autorizzazione.
if (env.IsDevelopment())
{
app.MapGrpcReflectionService().AllowAnonymous();
}
gRPCurl
gRPCurl è uno strumento da riga di comando creato dalla community gRPC. Sono incluse le funzionalità seguenti:
- Chiamata di servizi gRPC, inclusi i servizi di streaming.
- Individuazione dei servizi tramite reflection gRPC.
- Elencare e descrivere i servizi gRPC.
- Funziona con server sicuri (TLS) e non sicuri (testo normale).
Per informazioni sul download e l'installazione grpcurl
di , vedere la home page di GitHub gRPCurl.
Utilizzare grpcurl
.
L'argomento -help
illustra le grpcurl
opzioni della riga di comando:
$ grpcurl -help
Individuare i servizi
Usare il describe
verbo per visualizzare i servizi definiti dal server. Specificare <port>
come numero di porta localhost del server gRPC. Il numero di porta viene assegnato in modo casuale quando il progetto viene creato e impostato in Properties/launchSettings.json
:
$ grpcurl localhost:<port> describe
greet.Greeter is a service:
service Greeter {
rpc SayHello ( .greet.HelloRequest ) returns ( .greet.HelloReply );
rpc SayHellos ( .greet.HelloRequest ) returns ( stream .greet.HelloReply );
}
grpc.reflection.v1alpha.ServerReflection is a service:
service ServerReflection {
rpc ServerReflectionInfo ( stream .grpc.reflection.v1alpha.ServerReflectionRequest ) returns ( stream .grpc.reflection.v1alpha.ServerReflectionResponse );
}
L'esempio precedente:
- Esegue il
describe
verbo nel serverlocalhost:<port>
. Dove<port>
viene assegnato in modo casuale quando viene creato e impostato il progetto del server gRPCProperties/launchSettings.json
- Stampa i servizi e i metodi restituiti dalla reflection gRPC.
Greeter
è un servizio implementato dall'app.ServerReflection
è il servizio aggiunto dalGrpc.AspNetCore.Server.Reflection
pacchetto.
Combinare describe
con un servizio, un metodo o un nome di messaggio per visualizzarne i dettagli:
$ grpcurl localhost:<port> describe greet.HelloRequest
greet.HelloRequest is a message:
message HelloRequest {
string name = 1;
}
Chiamare i servizi gRPC
Chiamare un servizio gRPC specificando un servizio e un nome di metodo insieme a un argomento JSON che rappresenta il messaggio di richiesta. Il codice JSON viene convertito in Protobuf e inviato al servizio.
$ grpcurl -d '{ \"name\": \"World\" }' localhost:<port> greet.Greeter/SayHello
{
"message": "Hello World"
}
Nell'esempio precedente:
- L'argomento
-d
specifica un messaggio di richiesta con JSON. Questo argomento deve precedere l'indirizzo del server e il nome del metodo. - Chiama il
SayHello
metodo nelgreeter.Greeter
servizio. - Stampa il messaggio di risposta come JSON.
- Dove
<port>
viene assegnato in modo casuale quando viene creato e impostato il progetto del server gRPCProperties/launchSettings.json
Nell'esempio precedente viene \
utilizzato per eseguire l'escape del "
carattere . L'escape "
è necessario in una console di PowerShell, ma non deve essere usato in alcune console. Ad esempio, il comando precedente per una console macOS:
$ grpcurl -d '{ "name": "World" }' localhost:<port> greet.Greeter/SayHello
{
"message": "Hello World"
}
gRPCui
gRPCui è un'interfaccia utente Web interattiva per gRPC. gRPCui si basa su gRPCurl. gRPCui offre un'interfaccia utente grafica per l'individuazione e il test di servizi gRPC, simili a strumenti HTTP come L'interfaccia utente di Swagger.
Per informazioni sul download e l'installazione grpcui
di , vedere la home page di GitHub gRPCui.
uso di grpcui
Eseguire grpcui
con l'indirizzo del server per interagire con come argomento:
$ grpcui localhost:<port>
gRPC Web UI available at http://127.0.0.1:55038/
Nell'esempio precedente specificare <port>
come numero di porta localhost del server gRPC. Il numero di porta viene assegnato in modo casuale quando il progetto viene creato e impostato in Properties/launchSettings.json
Lo strumento avvia una finestra del browser con l'interfaccia utente Web interattiva. I servizi gRPC vengono individuati automaticamente usando la reflection gRPC.
Risorse aggiuntive
Gli strumenti sono disponibili per gRPC che consente agli sviluppatori di testare i servizi senza compilare app client:
- gRPCurl è uno strumento da riga di comando open source che fornisce l'interazione con i servizi gRPC.
- gRPCui si basa su gRPCurl e aggiunge un'interfaccia utente Web interattiva open source per gRPC.
Questo articolo illustra come:
- Configurare la reflection del server gRPC con un'app gRPC ASP.NET Core.
- Interagire con gRPC usando gli strumenti di test:
- Individuare e testare i servizi gRPC con
grpcurl
. - Interagire con i servizi gRPC tramite un browser usando
grpcui
.
- Individuare e testare i servizi gRPC con
Nota
Per informazioni su come eseguire unit test dei servizi gRPC, vedere Testare i servizi gRPC in ASP.NET Core.
Configurare la reflection gRPC
Gli strumenti devono conoscere il contratto Protobuf dei servizi prima di poterli chiamare. A questo scopo è possibile procedere in due modi:
- Configurare la reflection gRPC nel server. Gli strumenti, ad esempio gRPCurl, usano la reflection per individuare automaticamente i contratti di servizio.
- Aggiungere
.proto
file allo strumento manualmente.
È più facile usare la reflection gRPC. La reflection gRPC aggiunge un nuovo servizio gRPC all'app che i client possono chiamare per individuare i servizi.
gRPC ASP.NET Core include il supporto predefinito per la reflection gRPC con il Grpc.AspNetCore.Server.Reflection
pacchetto. Per configurare la reflection in un'app:
- Aggiungere un riferimento al
Grpc.AspNetCore.Server.Reflection
pacchetto. - Registrare la reflection in
Startup.cs
:AddGrpcReflection
per registrare i servizi che abilitano la reflection.MapGrpcReflectionService
per aggiungere un endpoint del servizio reflection.
public void ConfigureServices(IServiceCollection services)
{
services.AddGrpc();
services.AddGrpcReflection();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapGrpcService<GreeterService>();
if (env.IsDevelopment())
{
endpoints.MapGrpcReflectionService();
}
});
}
Quando viene configurata la reflection gRPC:
- Un servizio di reflection gRPC viene aggiunto all'app server.
- Le app client che supportano la reflection gRPC possono chiamare il servizio reflection per individuare i servizi ospitati dal server.
- I servizi gRPC vengono comunque chiamati dal client. La reflection abilita solo l'individuazione dei servizi e non ignora la sicurezza lato server. Gli endpoint protetti dall'autenticazione e dall'autorizzazione richiedono al chiamante di passare le credenziali affinché l'endpoint venga chiamato correttamente.
gRPCurl
gRPCurl è uno strumento da riga di comando creato dalla community gRPC. Sono incluse le funzionalità seguenti:
- Chiamata di servizi gRPC, inclusi i servizi di streaming.
- Individuazione dei servizi tramite reflection gRPC.
- Elencare e descrivere i servizi gRPC.
- Funziona con server sicuri (TLS) e non sicuri (testo normale).
Per informazioni sul download e l'installazione grpcurl
di , vedere la home page di GitHub gRPCurl.
Utilizzare grpcurl
.
L'argomento -help
illustra le grpcurl
opzioni della riga di comando:
$ grpcurl -help
Individuare i servizi
Usare il describe
verbo per visualizzare i servizi definiti dal server:
$ grpcurl localhost:5001 describe
greet.Greeter is a service:
service Greeter {
rpc SayHello ( .greet.HelloRequest ) returns ( .greet.HelloReply );
rpc SayHellos ( .greet.HelloRequest ) returns ( stream .greet.HelloReply );
}
grpc.reflection.v1alpha.ServerReflection is a service:
service ServerReflection {
rpc ServerReflectionInfo ( stream .grpc.reflection.v1alpha.ServerReflectionRequest ) returns ( stream .grpc.reflection.v1alpha.ServerReflectionResponse );
}
L'esempio precedente:
- Esegue il
describe
verbo nel serverlocalhost:5001
. - Stampa i servizi e i metodi restituiti dalla reflection gRPC.
Greeter
è un servizio implementato dall'app.ServerReflection
è il servizio aggiunto dalGrpc.AspNetCore.Server.Reflection
pacchetto.
Combinare describe
con un servizio, un metodo o un nome di messaggio per visualizzarne i dettagli:
$ grpcurl localhost:5001 describe greet.HelloRequest
greet.HelloRequest is a message:
message HelloRequest {
string name = 1;
}
Chiamare i servizi gRPC
Chiamare un servizio gRPC specificando un servizio e un nome di metodo insieme a un argomento JSON che rappresenta il messaggio di richiesta. Il codice JSON viene convertito in Protobuf e inviato al servizio.
$ grpcurl -d '{ \"name\": \"World\" }' localhost:5001 greet.Greeter/SayHello
{
"message": "Hello World"
}
Nell'esempio precedente:
- L'argomento
-d
specifica un messaggio di richiesta con JSON. Questo argomento deve precedere l'indirizzo del server e il nome del metodo. - Chiama il
SayHello
metodo nelgreeter.Greeter
servizio. - Stampa il messaggio di risposta come JSON.
Nell'esempio precedente viene \
utilizzato per eseguire l'escape del "
carattere . L'escape "
è necessario in una console di PowerShell, ma non deve essere usato in alcune console. Ad esempio, il comando precedente per una console macOS:
$ grpcurl -d '{ "name": "World" }' localhost:5001 greet.Greeter/SayHello
{
"message": "Hello World"
}
gRPCui
gRPCui è un'interfaccia utente Web interattiva per gRPC. gRPCui si basa su gRPCurl. gRPCui offre un'interfaccia utente grafica per l'individuazione e il test di servizi gRPC, simili a strumenti HTTP come L'interfaccia utente di Swagger.
Per informazioni sul download e l'installazione grpcui
di , vedere la home page di GitHub gRPCui.
uso di grpcui
Eseguire grpcui
con l'indirizzo del server per interagire con come argomento:
$ grpcui localhost:5001
gRPC Web UI available at http://127.0.0.1:55038/
Lo strumento avvia una finestra del browser con l'interfaccia utente Web interattiva. I servizi gRPC vengono individuati automaticamente usando la reflection gRPC.