grpcurl を試してみた。
こんにちは、k-jun です。今週も一週間のうちに見つけた library 及びネタ帳に溜まっている library を試していこうと思います。 フラフラと github をさまよっているうちにリストがだいぶ太ってきました。時間を見つけて消費していきたいです!
grpcurl
https://github.com/fullstorydev/grpcurl
curl 形式で grpc サーバーを debug できるツールです。確かに grpc server って debug がかなりめんどくさいんですよね。 自分の中で、テストコードでテストして実際の検証はしていません! があるあるになっています。
サクッとかんたんな todo アプリの grpc server を作ってみて、試していきます。 https://github.com/k-jun/playground-grpc
中身の実装はこんな感じ。
syntax = "proto3"; option go_package = "github.com/k-jun/grpc"; // https://developers.google.com/protocol-buffers/docs/proto3 // package northpole; service PlaygroundGrpc { rpc CreateTodo(TodoData) returns (TodoData) {} rpc ReadTodo(TodoData) returns (TodoData) {} rpc UpdateTodo(TodoData) returns (TodoData) {} rpc DeleteTodo(TodoData) returns (TodoData) {} } message TodoData { string id = 1; string title = 2; string body = 3; }
grpcurl はサーバーリフレクションと呼ばれる要件を実装していないと、諸々の追加機能 (Service の一覧表示) が使えないので、忘れず適用しておきます。 https://github.com/grpc/grpc-go/blob/master/Documentation/server-reflection-tutorial.md#enable-server-reflection
叩いてみる。
~ grpcurl -plaintext localhost:8080 list
PlaygroundGrpc
grpc.reflection.v1alpha.ServerReflection
サービスらしきものが取れている。諸々の情報を参考にすると、/Method
を追加で付与すると行けそうなので、実行してみる。
~ grpcurl -d '{"id": "1", "title": "homework", "body": "submit at 2021-06-13"}' --plaintext localhost:8080 PlaygroundGrpc/CreateTodo { "id": "1", "title": "homework", "body": "submit at 2021-06-13" }
いけてそう。
~ grpcurl -d '{"id": "1"}' --plaintext localhost:8080 PlaygroundGrpc/ReadTodo { "id": "1", "title": "homework", "body": "submit at 2021-06-13" }
Cache に保存した値が帰ってくることを確認。
Update
~ grpcurl -d '{"id": "1", "title": "homework", "body": "submit at 2021-06-14"}' --plaintext localhost:8080 PlaygroundGrpc/UpdateTodo { "id": "1", "title": "homework", "body": "submit at 2021-06-14" } ~ grpcurl -d '{"id": "1"}' --plaintext localhost:8080 PlaygroundGrpc/ReadTodo { "id": "1", "title": "homework", "body": "submit at 2021-06-14" }
Delete
~ grpcurl -d '{"id": "1"}' --plaintext localhost:8080 PlaygroundGrpc/DeleteTodo { "id": "1" } ~ grpcurl -d '{"id": "1"}' --plaintext localhost:8080 PlaygroundGrpc/ReadTodo ERROR: Code: Unknown Message: not found
全部問題ない。これはかなり便利ですね...。 次回 grpc の開発をする際には使っていこうと思います。それではでは。