はじめに
最近gRPCでAPIテスト書いたりちょっとしたマイクロサービス開発したりとでgrpcurlと触れ合う機会が多かったので備忘録を兼ねてまとめました。
なるべくイメージがつきやすいように実行コマンドとその出力をセットで書くようにしています。
読んで欲しい人
- grpc最近触れたけど手軽にサーバーリクエスト送る方法がまだイメージつかない人
- grpcurlっていうのがあるのを知って使い方を知りたい人
- grpcurlのオプションとか見たい人
__gRPC__についての説明は以前Go言語+gRPCをはじめから丁寧に解説してみた(宣伝)の記事を書いたことがあるので気になる方はそちらをご覧ください
grpcurlとは
公式: https://github.com/fullstorydev/grpcurl
grpcurlは、gRPCサーバーを操作するためのコマンドラインツールで以下の特徴を持ちます。
- curlライクに作られている
- ストリーミング方式を含むあらゆる種類のRPC方式をサポートしている
- セキュア/TLS サーバーとプレーンテキストサーバー (TLS を使用しない) の両方をサポートし、TLS構成のための多くのオプションを備えている
インストール
バイナリで欲しい人
HomeBrewで入れたい人
brew install grpcurl
Goで入れたい人
go install github.com/fullstorydev/grpcurl/cmd/grpcurl
インストール確認
下記のコマンドが正常に動けばgrpcurlのインストールは完了です。
grpcurl -help
環境準備
こちらも以前の記事で使った
のリポジトリを使います。
git clone https://github.com/ishishow/grpc_tutorial.git
cd grpc_tutorial
go run server.go
% Go gRPC Beginners Tutorial! // 起動成功です
サービス一覧を表示
% grpcurl -plaintext localhost:9000 list [~]
chat.ChatService
grpc.reflection.v1alpha.ServerReflection
-plaintextオプション
省略するとTLSで接続されます
list
grpcサーバーが持つサービスの一覧が確認できます。
今回はchat.ChatServiceとリフレクションの2つになります。
サービスの呼び出し
grpcurl -plaintext -d '{"body": "ishishow"}' localhost:9000 chat.Service
{
"body": "ishishow! Hello From the Server!"
}
こちらリクエストパラメータ有りの場合になります。
リクエストなしの場合は-d{...}は必要ありません。
ポイント
- 公式にもありますが、-dオプションはサーバーアドレスとサービス名の前に記述する必要があります。
To send a non-empty request, use the -d argument.
Note that all arguments must come before the server address and method name:
サーバーリフレクション
grpcurlはサーバーリフレクション を使っているのでそちらの処理がされていないとprotoファイルを直接渡さなければgrpcurlは実行できません。
サーバーリフレクションを使わないで実行する方法はこちら を参考にしてください。
また、各言語におけるサーバーリフレクション実装サンプルはこちら になります。
※ C# Go Java C++ Pythonはサポートされていますが、Ruby,とNodeはサーバーリフレクションはサポートされていませんので注意が必要です
他のクライアントツール
最後に他の有名なgrpcクライアントツールを紹介します。
-
grpcc
- grpcc は JavaScript (Node.js) で書かれています。サーバーリフレクションには対応していないのでprotoを読み込む必要があります。
-
evans
- evansは非インタラクティブなCLIモードとインタラクティブなREPLモードを兼ね備えた高機能なツールです。こちらはサーバーリフレクションに対応しています。
- bloomrpc
参考リンク