# gRPCの整理 ## 周辺知識の吸収 1. 公式ドキュメント gRPC概要 https://grpc.io/docs/guides/index.html gRPCコンセプト https://grpc.io/docs/guides/concepts/ 2. gRPCを雰囲気で理解 まずはこの記事の””gRPCの4つの通信方式””までを読んでgRPCの雰囲気を掴む https://qiita.com/gold-kou/items/a1cc2be6045723e242eb 3. gRPCをNodeで動かす 以下の記事はNodeでgRPCサーバを立てて、かつNodeのgRPCクライアントからサーバを呼ぶもの https://tomokazu-kozuma.com/run-grpc-sample-code-with-nodejs/ 以下のリポジトリは、上の記事で使っていたサンプルコード https://github.com/grpc/grpc/tree/master/examples/node/dynamic_codegen ## 登場する単語 - Protocol Buffers - スキーマ言語の一種(Json, XMLと同系列) - Googleの解説 - https://developers.google.com/protocol-buffers - Qiita - https://qiita.com/yugui/items/160737021d25d761b353 - protoファイル - Protocol Buffersを定義するファイル - クライアントサイドとバックエンドで共通して使う - > データ構造およびサービスはプロトコル定義ファイル (Proto Definition file (.proto)) でデザインされ、*protoc*プログラムにより[コンパイル](https://ja.wikipedia.org/wiki/コンパイラ)される。このコンパイル作業により目的のサービスに適合するコードが生成される。 https://ja.wikipedia.org/wiki/Protocol_Buffers - gRPCサービス - gRPC通信を経てバックエンドが提供、クライアントが使用できるメソッド - 下記をprotoファイルに定義する。 ```proto service HelloService { rpc SayHello (HelloRequest) returns (HelloResponse); } message HelloRequest { string greeting = 1; } message HelloResponse { string reply = 1; } ``` - HelloServiceというサービスは、SayHelloというメソッドでHelloRequestというパラメータ受け取りHelloResponseという戻り値を返す - 上の例は通常の関数呼び出しと同じように、クライアントがサーバーに単一の要求を送信し、単一の応答を返す単項RPC。 - gRPCには4種類のサービスメソッドを定義可能。それについては以下参照 - https://qiita.com/CyLomw/items/9aa4551bd6bb9c0818b6 そこで、具体的にどんなパラメータを受け取りどんな値を返すか(メソッドのロジック)を、それぞれの好きな言語で記述していく ```javascript function sayHello(call, callback) { callback(null, { message: "Good " + call.request.name }); } ```