とろろこんぶろぐ

かけだしR&Dフロントエンジニアの小言

今更ながらtypescript+golangでgRPCに入門した

gRPCに入門した

入門したコードは以下にある

github.com

参考にしました

qiita.com

qiita.com

構成

ちょっとレポジトリのフォルダ構成が雑でわかりづらいですが、 フロントエンド(BFFの想定)はtypescript、バックエンドはgolangAPIが作られることを想定している。

つまり、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サクッと触った感じだと便利そう。 なんか小さめの案件で使っていきたい。