使用 Postman 來發送 gRPC request

過去在測試 gRPC 時大部份都是依賴 BloomRPC,畢竟 grpcurl 還是語法上還是沒辦法像 GUI 一樣直覺,只是今年要更新 BloomRPC 時發現已停止維護,雖然 BloomRPC 有提供替代選擇 awesome-grpc,但要重新評估工具可能耗日曠時,剛好之前查 Microsoft 官方文件:Test gRPC services with Postman or gRPCurl in ASP.NET Core 看到 Postman 現在也支援呼叫 gRPC service,既然是老朋友有一定的熟悉度就來試試吧

基本環境說明

  1. macOS Ventura 13.2
  2. .NET SDK 7.0.203
  3. JetBrains Rider 2023.1

    使用 gRPC service 預設專案範本,相關內容使用之前筆記內容範例 再探 gRPC 在 ASP.NET Core 7 的 JSON 轉碼功能再探 gRPC 在 ASP.NET Core 7 的 JSON 轉碼功能 (Streaming)

  4. NuGet packages

    • Microsoft.AspNetCore.Grpc.JsonTranscoding 7.0.5
    • Grpc.AspNetCore.Server.Reflection 2.52.0
  5. Postman April 2023 (v10.13)

使用方式

要登入 Postman 後才能在 Workspace 下新增 gRPC Request

1loginrequired

  1. 使用 proto

    • import .proto file

      2import

    • import 其他 proto 的路徑

      3importpath

      • 路徑不正確會提示

        4patherror

    • 將 proto 檔定義的 service 與 method 儲存為 API

      這一步只是為了在 Postman 中便於管理 proto 中定義的 service 與 method

      5api

    • 儲存完成後就可以透過 API 來列出 service 與 method

      6using

      7methods

  2. 使用 reflection (我的環境無法使用)

    • 調整 gRPC Service

      • 新增 NuGet 套件:Grpc.AspNetCore.Server.Reflection
      • reflection 設定 (修改 Programs.cs)

        • using NET7GrpcService.Services;
          
          var builder = WebApplication.CreateBuilder(args);
          
          // Additional configuration is required to successfully run gRPC on macOS.
          // For instructions on how to configure Kestrel and gRPC clients on macOS, visit https://go.microsoft.com/fwlink/?linkid=2099682
          
          // Add services to the container.
          builder.Services.AddGrpc().AddJsonTranscoding();
                          
          var app = builder.Build();
                          
          // Configure the HTTP request pipeline.
          app.MapGrpcService<GreeterService>();
          app.MapGrpcService<ExampleService>();
          app.MapGet("/",
              () =>
                  "Communication with gRPC endpoints must be made through a gRPC client. To learn how to create a client, visit: https://go.microsoft.com/fwlink/?linkid=2086909");
          
          app.Run();
          
        • using NET7GrpcService.Services;
          
          var builder = WebApplication.CreateBuilder(args);
          
          // Additional configuration is required to successfully run gRPC on macOS.
          // For instructions on how to configure Kestrel and gRPC clients on macOS, visit https://go.microsoft.com/fwlink/?linkid=2099682
          
          // Add services to the container.
          builder.Services.AddGrpc().AddJsonTranscoding();
          // 加上下面這行
          builder.Services.AddGrpcReflection();
                          
          var app = builder.Build();
                          
          // Configure the HTTP request pipeline.
          app.MapGrpcService<GreeterService>();
          app.MapGrpcService<ExampleService>();
          // 加上下面四行
          if (app.Environment.IsDevelopment())
          {
              app.MapGrpcReflectionService();
          }
          
          app.MapGet("/",
              () =>
                  "Communication with gRPC endpoints must be made through a gRPC client. To learn how to create a client, visit: https://go.microsoft.com/fwlink/?linkid=2086909");
          
          app.Run();
          
    • Using server reflection

心得

Postman UI 有加強過:四個 gRPC 方法都有不同圖示

10icon

雖然 Using server reflection 有 bug 不能使用,但整體使用體驗還不差

參考資訊

  1. BloomRPC
  2. Microsoft 官方文件:Test gRPC services with Postman or gRPCurl in ASP.NET Core
  3. 再探 gRPC 在 ASP.NET Core 7 的 JSON 轉碼功能
  4. 再探 gRPC 在 ASP.NET Core 7 的 JSON 轉碼功能 (Streaming)
  5. 在 ASP.NET Core 上啟用 gRPC Reflection