ASP.NET Core: Test dịch vụ gRPC với Postman hoặc gRPCurl trong ASP.NET Core
Trong bài viết này
Công cụ có sẵn cho gRPC cho phép các nhà phát triển test dịch vụ mà không cần xây dựng ứng dụng khách:
- Postman là một nền tảng API có giao diện người dùng tương tác để gọi API. Postman có thể chạy trong trình duyệt hoặc được tải xuống và chạy cục bộ. Postman hỗ trợ gọi dịch vụ gRPC.
- gRPCurl là một công cụ dòng lệnh nguồn mở cung cấp khả năng tương tác với các dịch vụ gRPC.
- gRPCui được xây dựng dựa trên gRPCurl và thêm giao diện người dùng web tương tác nguồn mở cho gRPC.
Bài viết này thảo luận về cách:
- Thiết lập phản ánh máy chủ gRPC bằng ứng dụng gRPC ASP.NET Core.
- Tương tác với gRPC bằng các công cụ test:
- Gọi dịch vụ gRPC trong Postman.
- Khám phá và thử nghiệm các dịch vụ gRPC với
grpcurl
. - Tương tác với các dịch vụ gRPC thông qua trình duyệt bằng
grpcui
.
Ghi chú
Để tìm hiểu cách test đơn vị (unit test) các dịch vụ gRPC, hãy xem Kiểm thử dịch vụ gRPC trong ASP.NET Core.
Thiết lập phản ánh gRPC
Tooling phải biết hợp đồng dịch vụ của Protobuf trước khi có thể gọi chúng. Có hai cách để làm điều này:
- Thiết lập phản ánh gRPC trên máy chủ. Các công cụ như gRPCurl và Postman sử dụng tính năng phản ánh để tự động khám phá các hợp đồng dịch vụ.
- Thêm file
.proto
vào công cụ theo cách thủ công.
Việc sử dụng phản ánh gRPC dễ dàng hơn. Phản ánh gRPC thêm dịch vụ gRPC mới vào ứng dụng mà máy khách có thể gọi để khám phá các dịch vụ.
gRPC ASP.NET Core có hỗ trợ tích hợp cho phản ánh gRPC với gói Grpc.AspNetCore.Server.Reflection. Để định cấu hình phản ảnh trong một ứng dụng:
- Thêm một tham chiếu gói
Grpc.AspNetCore.Server.Reflection
. - Đăng ký phản ánh trong
Program.cs
:AddGrpcReflection
để đăng ký các dịch vụ cho phép phản ánh.MapGrpcReflectionService
để thêm điểm cuối dịch vụ phản ánh.
builder.Services.AddGrpc();
builder.Services.AddGrpcReflection();
var app = builder.Build();
app.MapGrpcService<GreeterService>();
IWebHostEnvironment env = app.Environment;
if (env.IsDevelopment())
{
app.MapGrpcReflectionService();
}
Khi phản ánh gRPC được thiết lập:
- Dịch vụ phản ánh gRPC được thêm vào ứng dụng máy chủ.
- Các ứng dụng khách hỗ trợ phản ánh gRPC có thể gọi dịch vụ phản ánh để khám phá các dịch vụ do máy chủ lưu trữ.
- Các dịch vụ gRPC vẫn được gọi từ máy khách. Phản ánh chỉ cho phép khám phá dịch vụ và không bỏ qua bảo mật phía máy chủ. Điểm cuối được bảo vệ bằng xác thực và ủy quyền yêu cầu người gọi chuyển thông tin xác thực để điểm cuối được gọi thành công.
Postman
Postman là một nền tảng API. Nó hỗ trợ gọi các dịch vụ gRPC bằng giao diện người dùng tương tác, cùng với nhiều tính năng của nó.
Để tải xuống và cài đặt Postman, hãy xem trang Tải xuống Postman.
Sử dụng Postman
Postman có giao diện người dùng tương tác để gọi các dịch vụ gRPC. Để gọi dịch vụ gRPC bằng Postman:
- Chọn nút New và chọn gRPC Request.
- Nhập tên máy chủ và cổng của máy chủ gRPC vào URL máy chủ. Ví dụ,
localhost:5000
. Không bao gồm lược đồhttp
hayhttps
trong URL. Nếu máy chủ sử dụng Transport Layer Security (TLS), hãy chọn biểu tượng ổ khóa bên cạnh URL máy chủ để bật TLS trong Postman. - Điều hướng đến phần Service definition, sau đó chọn phản ánh máy chủ hoặc import file proto của ứng dụng. Khi hoàn tất, danh sách thả xuống bên cạnh hộp văn bản URL máy chủ có danh sách các phương thức gRPC có sẵn.
- Để gọi một phương thức gRPC, hãy chọn phương thức đó trong danh sách thả xuống, chọn Generate Example Message, sau đó chọn Invoke để gửi lệnh gọi gRPC đến máy chủ.
Một đoạn video ngắn cũng có sẵn hướng dẫn cách sử dụng Postman với gRPC.
gRPCurl
gRPCurl là một công cụ dòng lệnh được tạo bởi cộng đồng gRPC. Các tính năng của nó bao gồm:
- Gọi các dịch vụ gRPC, bao gồm cả dịch vụ trình phát.
- Khám phá dịch vụ bằng cách sử dụng phản ánh gRPC.
- Liệt kê và mô tả các dịch vụ gRPC.
- Hoạt động với các máy chủ bảo mật (TLS) và không an toàn (văn bản thuần túy).
Để biết thông tin về cách tải xuống và cài đặt grpcurl
, hãy xem trang chủ gRPCurl GitHub.
Sử dụng grpcurl
Đối số -help
giải thích các tùy chọn dòng lệnh grpcurl
:
$ grpcurl -help
Khám phá dịch vụ
Sử dụng động từ describe
để xem các dịch vụ được xác định bởi máy chủ. Chỉ định <port>
làm 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
:
$ 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:
- Chạy động từ
describe
trên máy chủlocalhost:<port>
. Vị trí<port>
được chỉ định ngẫu nhiên khi dự án máy chủ gRPC được tạo và thiết lập trongProperties/launchSettings.json
- In các dịch vụ và phương thức được phản ánh gRPC trả về.
Greeter
là một dịch vụ được thực hiện bởi ứng dụng.ServerReflection
là dịch vụ được góiGrpc.AspNetCore.Server.Reflection
g thêm vào.
Kết hợp describe
với tên dịch vụ, phương thức hoặc tin nhắn để xem chi tiết:
$ 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 đối số JSON đại diện cho thông báo yêu cầu. JSON được chuyển đổi thành Protobuf và gửi đến dịch vụ.
$ grpcurl -d '{ \"name\": \"World\" }' localhost:<port> greet.Greeter/SayHello
{
"message": "Hello World"
}
Trong ví dụ trên:
- Đối số
-d
chỉ định một tin nhắn yêu cầu bằng JSON. Đối số này phải đến trước địa chỉ máy chủ và tên phương thức. - Gọi phương thức
SayHello
trên dịch vụgreeter.Greeter
. - In tin nhắn phản hồi dưới dạng JSON.
- Trong đó
<port>
được chỉ định ngẫu nhiên khi dự án máy chủ gRPC được tạo và thiết lập trongProperties/launchSettings.json
Ví dụ trên sử dụng \
để thoát khỏi ký tự "
. Cần phải thoát "
trong console PowerShell nhưng không được sử dụng trong một số console. Ví dụ: lệnh trên đó cho console macOS:
$ grpcurl -d '{ "name": "World" }' localhost:<port> greet.Greeter/SayHello
{
"message": "Hello World"
}
gRPCui
gRPCui là giao diện người dùng web tương tác dành cho gRPC. gRPCui được xây dựng dựa trên gRPCurl. gRPCui cung cấp GUI để khám phá và test các dịch vụ gRPC, tương tự như các công cụ HTTP như Postman hoặc Swagger UI.
Để biết thông tin về việc tải xuống và cài đặt grpcui
, hãy xem trang chủ gRPCui GitHub.
sử dụng grpcui
Chạy grpcui
với địa chỉ máy chủ để tương tác làm đối số:
$ grpcui localhost:<port>
gRPC Web UI available at http://127.0.0.1:55038/
Trong ví dụ trên, chỉ định <port>
làm 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à thiết lập Properties/launchSettings.json
Công cụ này khởi chạy một cửa sổ trình duyệt với giao diện người dùng web tương tác. Các dịch vụ gRPC được tự động phát hiện bằng cách sử dụng phản ánh gRPC.
Tài nguyên bổ sung
- Trang chủ Postman
- Trang chủ gRPCurl GitHub
- Trang chủ gRPCui GitHub
- Grpc.AspNetCore.Server.Reflection
- Test dịch vụ gRPC trong ASP.NET Core
- Giả lập ứng dụng khách gRPC trong các test