これまでに色々なWebサービスの開発をやってきたけれど、Swagger + Web API (REST)の開発が多くgRPCを業務で採用してこなかったので実際に動かしてみてキャッチアップしておこうと思いました。
実際に動かしてみたプロジェクトは以下のリポジトリにおいてあります。
やってみたこととしては以下になります。
- protoファイルを作成する
- protoファイルからコードの生成をする
- 生成したコードを使ってServerとClientのコードを書いて動かしてみる
- おまけでPostmanで動作確認
なぜgRPCなのか?
REST APIと比べてgRPCだと何が嬉しいでしょうか?
APIの設計や仕様の定義がREST APIと比較してシンプルになります。
RESTではURLのパス、HTTPメソッドをどうするか?結構悩むことがありますがこの辺は必要ありません。IDL(Interface Definition Language)のProtocol BufferもOpenAPIの定義よりも楽に書くことができます。
パフォーマンスの観点で、JSONやXMLでシリアライズされたリクエストフォーマットと比べて、バイナリでやり取りするため通信量が少なく効率的で高速な通信が可能になります。
また、HTTP/2通信により1リクエスト1レスポンスではなく、Streamingで双方向に複数のメッセージのやり取りができます。
多くの開発言語をサポートしているので、異なる開発言語間での通信も簡単に実装できます。
この辺の理由から採用されるケースが多くなってきているように思います。
2017年の資料で少し古いですが、gRPC vs REST について書かれた以下のスライドが勉強になったので貼っておきます。
PostmanのgRPC対応
PostmanはWeb APIの開発用に便利なツールです。GUIでテストしたいリクエストの設定をしてE2Eテストが簡単にできます。NewmanというPostmanで設定した内容を読み込ませてCLIで実行できるツールもあるので自動化も可能です。
PostmanがgRPCにも対応しているようなので以下の記事を参考にやってみました。
Newボタンを押すと新しいリクエストを追加できます。
追加したら今回はローカルに立てたサーバーで試すので localhost:50051 として、protoファイルを読み込ませるとリクエストしたいサービスを選択できるようになりました。
この状態でinvokeするとレスポンスの確認ができました。これはgRPCサーバー開発をするのにとても便利そうです。
ただまだBetaであるからかリクエストの内容をSaveすることができなかったので、まだNewmanによるCLIでの実行や繰り返しテストするような用途では利用できなさそうなのが残念でした。
以下がNewボタンを押したら表示される新しいリクエストの種類を選択する画面です。
個人的にはgRPCurlなんかを使うよりPostmanの方が動作確認に良さそうだと思いました。
参考ドキュメント
Zennにも記事を書きました。
コメント