Go言語でgRPCに入門してみた4 grpcurlで動作確認

gRPCの動作確認


RESTのAPIサーバなどの動作確認にはcurlコマンドを使うことが多いと思いますが(あとはjq)、それのgRPCサーバ版がないかなぁ、と思ったらありました。
早速、使ってみます。

https://github.com/fullstorydev/grpcurl

brew install grpcurl

ちなみにEvansというツールもあるようで、今回は使いませんでしたが、もっと本格的にgRPCサーバを構成する時にはこちらも良さそうではありました。
https://engineering.mercari.com/blog/entry/grpc_and_evans/


gRPCサーバをリフレクションを使えるように改造する

動作確認の前にgRPCサーバがリフレクションを使えるようにします。
元のgRPCサーバはこちらの記事で作成したサーバ側に手を加えることにします。

https://note.com/miyazi777/n/n2bfb719b0667

リフレクションというのは、gRPCサーバが公開しているサービス・メソッドを知ることができるもののようです。
と言ってもやるとは単純で、以下のようにreflection.Register関数で起動するサーバを登録するだけです。

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

参考


https://kiririmode.hatenablog.jp/entry/20181008/1538984412#%E8%A9%A6%E3%81%99%E3%81%9F%E3%82%81%E3%81%AB
https://github.com/fullstorydev/grpcurl


いいなと思ったら応援しよう!