TL;DR

Buf が開発した、Web ブラウザと gRPC に互換性のある HTTP API を作るためのライブラリ群。gRPC、gRPC Web、独自の Connect の 3 つのプロトコルに対応している。

なぜ必要か

gRPC Web では、ブラウザから gRPC を使うために Envoy などのプロキシサーバを経由する必要があった。Connect では、ブラウザが直接サーバと通信できる。

仕組み

gRPC、gRPC Web、Connect の 3 つのプロトコルをサポートする、マルチプロトコルのライブラリである。対応している言語は Go、Node.js(JavaScript、TypeScript)、Swift、Kotlin である。

Connect プロトコルは HTTP の上で動く RPC のプロトコルで、特定の HTTP バージョンに固有のフレーミングに依存しない。単項(リクエストとレスポンスが 1 つずつ)の RPC は、/package.Service/Method の形のパスへの POST リクエストで呼び出す。ボディは gRPC のようなバイナリのフレーミングを使わず、Protobuf か JSON のメッセージをそのまま入れる。双方向ストリーミングには HTTP/2 が必要だが、それ以外の RPC は HTTP/1.1 でも使える。

例

公式ドキュメントでは、単項 RPC のやり取りを次のように示している。

POST /connectrpc.greet.v1.GreetService/Greet HTTP/1.1
Host: demo.connectrpc.com
Content-Type: application/json
 
{"name": "Buf"}
HTTP/1.1 200 OK
Content-Type: application/json
 
{"greeting": "Hello, Buf!"}

関連

出典