grpc-ecosystem/grpc-gatewayのセットアップ方法をまとめてみた
Server Side Kotlinのアウトプットにつかっているレポジトリにgrpc-gatewayを入れてみたので、セットアップ方法をまとめておく。
grpc-gatewayはHTTP/1.1のAPIの提供する。定義したprotoにoptionを加えることでHTTP/1.1 APIのコードとgrpc-clientのリクエストを仲介するgoコードが生成される。
定義したprotoに次のようなoptionを加える。
service TaskService { rpc GetTaskService (GetTaskInbound) returns (TaskOutbound) { option (google.api.http) = { post: "/grpcgateway/task" body: "*" }; } } message GetTaskInbound { uint32 task_id = 1; }
このoption定義によるとPOSTメソッドで パスが/grpcgateway/task
のエンドポイントができあがる。リクエストボディには次のようにprotoに定義したGetTaskInboundのmessage定義をJSON形式でセットしてリクエストする。
$ curl -XPOST \ http://localhost:8081/grpcgateway/task \ -H 'Content-type: application/json' \ -d '{"task_id": 1}'
次にprotocでHTTP/1.1 APIのコードとgrpc-clientのリクエストを仲介するgoコードを生成する。
protoc -I/usr/local/include \ -I./proto \ -I$$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \ --grpc-gateway_out=logtostderr=true:grpc/gen/ \ ./proto/soushin/spring5-kotlin-application/task/task.proto
このprotocを実行すると task.pb.gw.go
が生成される。生成されたproxyコードを使ってエンドポイントに定義すれば良い。
定義の仕方はgrpc-gatewayのexmapleが分かりやすい。
grpc-gateway/main.go at master · grpc-ecosystem/grpc-gateway · GitHub
コード
動くコードをgithubに置いたので合わせて確認してほしい。