LoginSignup
1
1

More than 1 year has passed since last update.

grpcurlを使う

Posted at

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を以下のように書き換えます。

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にリクエスト送信できていることが確認できました。

参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1