0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Server Reflectionを使う【gRPC】【Golang】

Posted at

背景

$ grpcurl -plaintext localhost:10000 list
Failed to list services: server does not support the reflection API

grpcurlを使おうとしたら「サーバーがreflection APIをサポートしてないよ」って言われた

Reflection APIとは?

Server Reflectionという機能は端的に説明すると、protocコマンドでサーバを生成する際に利用していた.protoファイルと同等のものを返してくれるAPIです。これにより手元に.protoファイルがなくてもエンコードを行うことができます。

Server Reflectionが実装されていないgRPCサーバーでも簡単に叩けるCLIを作る

Reflection APIを有効にする

数行追加するだけでできた

import (
	// ============= 省略 ============= //
+	"google.golang.org/grpc/reflection"
 	// ============= 省略 ============= //
)

// ============= 省略 ============= //

func main() {
 	// ============= 省略 ============= //
        // gRPCサーバーのインスタンスを作成.
	grpcServer := grpc.NewServer(opts...)

	// サービスの実装をgRPCサーバに登録.
	chat.RegisterChatServer(grpcServer, newServer())

+	// reflection serviceをgRPCサーバーに登録.
+	reflection.Register(grpcServer)

	// サーバーのServe()をポートの詳細とともに呼び出す.
	// プロセスがキルされるかStop()が呼ばれるまでブロッキング待機.
	grpcServer.Serve(lis)
}

できた

$ grpcurl -plaintext localhost:10000 list
chat.Chat
grpc.reflection.v1alpha.ServerReflection
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?