概要 †
- RPCでは、IDL(インターフェース定義言語)を使ってあらかじめAPI仕様を .proto ファイルとして定義し、そこからサーバー側&クライアント側に必要なソースコードのひな形を生成する
- 言語に依存しないIDLで先にインタフェースを定義することで、様々なプログラミング言語の実装を生成できるというメリットがある
- 通信プロトコルには HTTP/2 が使われる
- HTTP/2 が使われているので、クライアントとサーバー間のリクエストとレスポンスは 1:1 だけでなく 1:* や *:* などの通信が可能
- クライアントからのリクエストで複数のメッセージを投げられて、サーバーから複数メッセージを返すなどの通信が可能になる
- HTTP/2 の機能の1つであるストリーム(同一の TCP 接続でクライアントとサーバーが双方向にデータをやりとり出来る仕組み)のおかげ
- Protocol buffers でデータをシリアライズ化してやりとりする
- 型付けされたメッセージの他に key-value(value は複数設定可能)で定義可能なメタデータというものも存在しており、HTTP ヘッダのように扱うことができる
- 利用例としては、不正なリクエストかの判断を行うための認証情報や、複数のサービスを横断する処理をトレースする ID などをハンドリングするケースが挙げられる