grpcurlで以前作ったプロジェクトのgrpcエンドポイントを叩きます。
grpcurlは
grpcurl is a command-line tool that lets you interact with gRPC servers. It's basically curl for gRPC servers.
というもので、以前のプロジェクトでいうclient/main.go
の代わりにterminalからcurlすることを可能にしてくれる便利ツールです。
以下のコマンドでinstall
brew install grpcurl
サービス一覧を表示
grpcurl -plaintext 127.0.0.1:19003 list
//Failed to list services: server does not support the reflection API
リフレクションが何かは以下で確認
gRPC リフレクションは、対象の gRPC サーバがどのようなサービス、メソッドを公開しているかを知るための機能です。
gRPC を使う上でリフレクションを有効にすると、gRPCurl や Evans といったツールを使う際に Protocol Buffers などの IDL を直接的に読み込まずにメソッドを呼び出すことができてとても便利ですが...(略)
gRPCリフレクションを有効にする必要があるので、server/main.go
を以下のように書き換えます。
package main
import (
"log"
"net"
"example.com/cat/service"
pb "example.com/cat/proto"
"google.golang.org/grpc"
"google.golang.org/grpc/reflection"
)
func main() {
listenPort, err := net.Listen("tcp", ":19003")
if err != nil {
log.Fatalln(err)
}
server := grpc.NewServer()
catService := &service.MyCatService{}
// ****今回追加****
reflection.Register(server)
// 実行したい実処理をseverに登録する
pb.RegisterCatServer(server, catService)
server.Serve(listenPort)
}
再度grpcurlを実行します。
> grpcurl -plaintext 127.0.0.1:19003 list
cat.Cat
grpc.reflection.v1alpha.ServerReflection
正常なレスポンスが返ってくるようになりました。
メソッドの一覧
> grpcurl -plaintext 127.0.0.1:19003 list cat.Cat
cat.Cat.GetMyCat
メソッド一覧もかえってきました。
サービスの呼び出し
> grpcurl -plaintext 127.0.0.1:19003 cat.Cat/GetMyCat
ERROR:
Code: Unknown
Message: Not Found YourCat
リクエストパラメータがないので足してあげます。
> grpcurl -plaintext -d '{"target_cat": "tama"}' 127.0.0.1:19003 cat.Cat/GetMyCat
{
"name": "tama",
"kind": "mainecoon"
}
正常にgrpc serverにリクエスト送信できていることが確認できました。