🐥

Postman でgRPC のリクエスト送信してみる

2022/02/14に公開

はじめに

どうやらPostman v9.7.1からgRPC のリクエストがサポートされるようになったらしい。gRPC 公式のPython Quick start で試してみる。

Postman v9.7.1
What's New

1. Support for gRPC Request
With this release, you can now test your gRPC request in Postman. To get started, open a Workspace, click New and then select "gRPC Request".

https://www.postman.com/downloads/release-notes/

前提条件

  • Python 3.5以降
  • pip 9.0.1以降

私のテスト環境

  • Windows 10 Home
  • Python 3.10.2
  • pip 21.2.4
  • Postman v9.13.1

準備

gRPC/gRPC ツールのインストール

$ python -m pip install grpcio grpcio-tools

サンプルコードのダウンロード

$ git clone -b v1.43.0 https://github.com/grpc/grpc

Protobuf の定義

grpc/examples/protos/helloworld.protoを更新。

helloworl.proto
syntax = "proto3";

option java_multiple_files = true;
option java_package = "io.grpc.examples.helloworld";
option java_outer_classname = "HelloWorldProto";
option objc_class_prefix = "HLW";

package helloworld;

// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply) {}
  // 以下行の追加
  rpc SayHelloAgain (HelloRequest) returns (HelloReply) {}
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;

gRPC コードの生成

grpc/examples/python/helloworldディレクトリで以下のコマンドを実行。

$ python -m grpc_tools.protoc -I../../protos --python_out=. --grpc_python_out=. ../../protos/helloworld.proto

サーバコードの修正

ポートは50051みたい。

greeter_server.py
from concurrent import futures
import logging

import grpc
import helloworld_pb2
import helloworld_pb2_grpc


class Greeter(helloworld_pb2_grpc.GreeterServicer):
    # 変更
    def SayHello(self, request, context):
        return helloworld_pb2.HelloReply(message='Hello, %s!' % request.name) 

    # 追加
    def SayHelloAgain(self, request, context):
        return helloworld_pb2.HelloReply(message='Hello again, %s!' % request.name)


def serve():
    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
    helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server)
    server.add_insecure_port('[::]:50051')
    server.start()
    server.wait_for_termination()

サーバ起動

$ python grpc/examples/python/helloworld/greeter_server.py 

Postman の操作

新規gRCP リクエスト作成

"File" -> "New..." -> "gRPC Request"

リクエストの設定

  1. gRPC サーバーのアドレスをURL バーに入力
    localhost:50051

  2. Protobuf (.proto)のインポート
    "Choose a way to load services and method:" -> "More ways..." -> "Import protobuf fefinition from local file" -> grpc/examples/protos/helloworld.protoをインポート
  • Name: なんでもよい
  • Version Name: なんでもよい(例1.0.0)

テスト

  1. Invokeでリクエストを送信
    "Hello, !"がレスポンスとして返る。

  2. Message を送信
    Protobuf で定義したrequest message を送信。ちなみに、インポートしたProtobuf でmessage をオートコンプリートしてくれる。また、Generate Example Metadataでmessage を自動生成する機能もある。"Hello,<name>!"がレスポンスとして返る。

message
{
    "name": "hogehoge"
}

  1. Method をGreeter/SayHelloAgainに変更
    今度は"Hello again, <name>!"がレスポンスとして返る。

まとめ

Postman を使うと、GUI ぽちぽちでgRPC のデバッグができるみたい、便利。

Discussion