寶藏好物gRPCurl
寶物簡介
grpcur是一個與grpc伺服器交互的命令行工具,可認為是gRPC的curl
工具。
grpcurl用於從命令行調用gRPC伺服器支援的RPC方法,gRPC使用二進位編碼(protobuf), 不能利用常規的curl工具(早期的curl版本還不支援HTTP/2)。
-
grpcurl工具接受json編碼的消息(對人類和腳本更友好), 工具底層會轉化為protobuf與伺服器交互。
-
grpcurl 必須了解服務的Protobuf協議(服務的schema),才能調用它們, grpcurl通過三種方式之一實現此目的。
- gRPC伺服器添加gRPC反射
- 直接讀取proto源文件
- 載入編譯後的protoset文件(包含已被編碼的proto描述文件)
特性
gRPCurl是有gRPC上去創建的命令行工具,功能包括:
- 調用grpc服務,包括流式服務
- 使用grpc反射進行服務發現
- 列出並描述 grpc服務
- 支援調用安全(TLS)或者不安全(plain-text)的gRPC服務
ASP.NET Core設置grpc反射
- 添加Grpc.AspNetCore.Server.Reflection包引用
- Startup.cs註冊反射
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();
}
});
}
有各種作業系統的適配版本。
服務發現、服務調用
grpcurl list/describe 可以列出gRPC服務端反射的protobuf
- grpcurl localhost:5001 list
greet.Greeter
grpc.reflection.v1alpha.ServerReflection
- grpcurl localhost:5001 describe
greet.Greeter is a service:
service Greeter {
rpc SayHello ( .greet.HelloRequest ) returns ( .greet.HelloReply );
}
grpc.reflection.v1alpha.ServerReflection is a service:
service ServerReflection {
rpc ServerReflectionInfo ( stream .grpc.reflection.v1alpha.ServerReflectionRequest ) returns ( stream .grpc.reflection.v1alpha.ServerReflectionResponse );
}
grpc -d ( Data for request contents) 傳參調用gRPC方法
- grpcurl -d {“name”:”World”} localhost:5001 greet.Greeter/SayHello
{
"message": "Hello World"
}
gRPCui
gRPCui 是 gRPC 的互動式 Web UI,基於gRPCurl,並提供一個GUI來發現和測試 gRPC 服務,類似於 Postman 或 Swagger UI 等 HTTP 工具。
- 安裝: go install github.com/fullstorydev/grpcui/cmd/grpcui@latest
- 使用: grpcui localhost:5001
會立刻打開類Swagger窗口:
輸入Request Header、Request Data,自行倒騰。
就是這麼神奇!
以上是利用gRPC服務反射,獲取protobuf的方式,grcpurl還支援直接讀取protobuf文件。
`grpcurl -import-path ../protos -proto greet.proto -d {\"name\":\"World\"} localhost:5001 greet.Greeter/SayHello`