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!"}