Nguon: Microsoft Learn · .NET 8.0

Kiểm thử dịch vụ gRPC với gRPCurl và gRPCui trong ASP.NET Core

Nguồn: Test gRPC services with gRPCurl and gRPCui in ASP.NET Core

Có các công cụ dành cho gRPC giúp nhà phát triển kiểm thử dịch vụ mà không cần xây dựng ứng dụng client:

Bài viết này thảo luận về cách:

Lưu ý: Để tìm hiểu cách unit test dịch vụ gRPC, xem Test gRPC services in ASP.NET Core.

Cài đặt gRPC reflection

Công cụ phải biết hợp đồng Protobuf (giao thức Protobuf) của dịch vụ trước khi có thể gọi chúng. Có hai cách để làm điều này:

Sử dụng gRPC reflection dễ hơn. gRPC reflection thêm một dịch vụ gRPC mới vào ứng dụng để client có thể gọi và khám phá các dịch vụ.

gRPC ASP.NET Core có hỗ trợ tích hợp cho gRPC reflection thông qua gói Grpc.AspNetCore.Server.Reflection. Để cấu hình reflection trong ứng dụng:

csharp
builder.Services.AddGrpc();
builder.Services.AddGrpcReflection();

var app = builder.Build();

app.MapGrpcService<GreeterService>();

IWebHostEnvironment env = app.Environment;

if (env.IsDevelopment())
{
    app.MapGrpcReflectionService();
}

Khi gRPC reflection được cài đặt:

Bảo mật dịch vụ Reflection

gRPC reflection trả về danh sách các API khả dụng, có thể chứa thông tin nhạy cảm. Cần cẩn thận để hạn chế quyền truy cập vào dịch vụ gRPC reflection.

gRPC reflection thường chỉ cần thiết trong môi trường phát triển cục bộ. Để phát triển cục bộ, dịch vụ reflection chỉ nên được ánh xạ khi IsDevelopment trả về true:

csharp
if (env.IsDevelopment())
{
    app.MapGrpcReflectionService();
}

Quyền truy cập vào dịch vụ có thể được kiểm soát thông qua các phương thức mở rộng ủy quyền chuẩn của ASP.NET Core, chẳng hạn như AllowAnonymousRequireAuthorization.

Ví dụ, nếu ứng dụng đã được cấu hình để yêu cầu ủy quyền theo mặc định, cấu hình endpoint gRPC reflection với AllowAnonymous để bỏ qua xác thực và ủy quyền.

csharp
if (env.IsDevelopment())
{
    app.MapGrpcReflectionService().AllowAnonymous();
}

gRPCurl

gRPCurl là công cụ dòng lệnh được tạo bởi cộng đồng gRPC. Các tính năng bao gồm:

Để biết thông tin về tải xuống và cài đặt grpcurl, xem trang chủ gRPCurl trên GitHub.

Sử dụng grpcurl

Tham số -help giải thích các tùy chọn dòng lệnh của grpcurl:

console
$ grpcurl -help

Khám phá dịch vụ

Sử dụng động từ describe để xem các dịch vụ được định nghĩa bởi máy chủ. Chỉ định <port> là số cổng localhost của máy chủ gRPC. Số cổng được gán ngẫu nhiên khi dự án được tạo và được đặt trong Properties/launchSettings.json:

console
$ 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 );
}

Ví dụ trên:

Kết hợp describe với tên dịch vụ, phương thức hoặc thông báo để xem chi tiết:

powershell
$ grpcurl localhost:<port> describe greet.HelloRequest
greet.HelloRequest is a message:
message HelloRequest {
  string name = 1;
}

Gọi dịch vụ gRPC

Gọi dịch vụ gRPC bằng cách chỉ định tên dịch vụ và phương thức cùng với tham số JSON biểu diễn thông báo yêu cầu. JSON được chuyển đổi thành Protobuf và gửi đến dịch vụ.

console
$ grpcurl -d '{ \"name\": \"World\" }' localhost:<port> greet.Greeter/SayHello
{
  "message": "Hello World"
}

Trong ví dụ trên:

Ví dụ trên sử dụng \ để thoát ký tự ". Thoát " là cần thiết trong console PowerShell nhưng không được sử dụng trong một số console. Ví dụ, lệnh trước cho console macOS:

console
$ grpcurl -d '{ "name": "World" }' localhost:<port> greet.Greeter/SayHello
{
  "message": "Hello World"
}

gRPCui

gRPCui là giao diện web tương tác cho gRPC. gRPCui được xây dựng trên nền tảng gRPCurl. gRPCui cung cấp GUI (giao diện đồ họa người dùng) để khám phá và kiểm thử dịch vụ gRPC, tương tự như các công cụ HTTP như Swagger UI.

Để biết thông tin về tải xuống và cài đặt grpcui, xem trang chủ gRPCui trên GitHub.

Sử dụng grpcui

Chạy grpcui với địa chỉ máy chủ để tương tác như là tham số:

powershell
$ grpcui localhost:<port>
gRPC Web UI available at http://127.0.0.1:55038/

Trong ví dụ trên, chỉ định <port> là số cổng localhost của máy chủ gRPC. Số cổng được gán ngẫu nhiên khi dự án được tạo và đặt trong Properties/launchSettings.json.

Công cụ khởi chạy cửa sổ trình duyệt với giao diện web tương tác. Các dịch vụ gRPC được tự động khám phá bằng gRPC reflection.

Tài nguyên bổ sung