⛳
Go言語でgRPCに入門してみた4 grpcurlで動作確認
gRPCの動作確認
RESTのAPIサーバなどの動作確認にはcurlコマンドを使うことが多いと思いますが(あとはjq)、それのgRPCサーバ版がないかなぁ、と思ったらありました。
早速、使ってみます。
brew install grpcurl
ちなみにEvansというツールもあるようで、今回は使いませんでしたが、もっと本格的にgRPCサーバを構成する時にはこちらも良さそうではありました。
gRPCサーバをリフレクションを使えるように改造する
動作確認の前にgRPCサーバがリフレクションを使えるようにします。
元のgRPCサーバはこちらの記事で作成したサーバ側に手を加えることにします。
リフレクションというのは、gRPCサーバが公開しているサービス・メソッドを知ることができるもののようです。
と言ってもやるとは単純で、以下のようにreflection.Register関数で起動するサーバを登録するだけです。
server.go
import (
…
"google.golang.org/grpc/reflection" <- こんなパッケージをimportする
…
)
…
server := grpc.NewServer()
hello.RegisterHelloServer(server, &Hello{})
reflection.Register(server) <- 追加
server.Serve(listenPort)
これでgrpcurlでgRPCサーバを叩く準備が出来ました。
サービス一覧表示
まずはサービスの一覧を表示してみます。
grpcurl -plaintext -import-path . -proto hello.proto localhost:19003 list
Hello
grpc.reflection.v1alpha.ServerReflection
リフレクション対応していれば、protoファイルを指定しなくても下記のコマンドで大丈夫です。
grpcurl -plaintext localhost:19003 list
メソッド一覧表示
grpcurl -plaintext localhost:19003 list Hello
Hello.hello
メソッドの詳細取得
grpcurl -plaintext localhost:19003 describe Hello.hello
Hello.hello is a method:
rpc hello ( .HelloMessage ) returns ( .HelloResponse );
メソッドの呼び出し
grpcurl -plaintext -d '{ "name": "world" }' localhost:19003 Hello.hello
{
"msg": "hello world\n"
}
メタデータを付ける
認証でbearer tokenを付ける必要がある場合は以下のような感じでメタデータを指定する。
grpcurl -plaintext -d '{ "name": "world" }' -rpc-header 'authorization: Bearer testtoken' localhost:19003 Hello.hello
参考
Discussion