gRPCに入門した
入門したコードは以下にある
参考にしました
構成
ちょっとレポジトリのフォルダ構成が雑でわかりづらいですが、 フロントエンド(BFFの想定)はtypescript、バックエンドはgolangでAPIが作られることを想定している。
つまり、gRPCクライアントがnodeのtypescript、gRPCサーバがgoということ。
上記のQiita記事だとnode/goでgRPCを触ってみるものだったが、実際にはclientとserverで言語が変わるだろうから、それを想定して書いてみた。
自動生成
syntax = "proto3"; service BookService { rpc GetBook(GetBookRequest) returns (GetBookResponse); } message GetBookRequest { string id = 1; } message GetBookResponse { Book book = 1; } message Book { string title = 1; string author = 2; }
上記protoをベースに、typescriptとgolangそれぞれの型が自動生成される。.protoファイルでクライアント・サーバのインターフェースが定義されるので、誤認が減りそうで良いなと思った。
typescript側の自動生成されたコード grpc-test/src/proto at master · ka2jun8/grpc-test · GitHub
golang側の自動生成されたコード grpc-test/go/proto at master · ka2jun8/grpc-test · GitHub
mock
tsのserverはfrontend側のmockとして利用でき、goのclientはmockgenで生成してclientのmockとして利用できる。
つまり、フロントエンド側ではgolangの実装を待たずにtypescriptでserverを作ればmockとして開発を進めることができるし、逆にバックエンド側ではgoのmockgenで生成したmock_clientでAPIの動作をテストできる。
まとめ
gRPCサクッと触った感じだと便利そう。 なんか小さめの案件で使っていきたい。