gRPC
Protocol Buffers を IDL に用いる契約駆動のRPCフレームワーク。_moc-web-infra
特徴
.protoでサービス・メッセージを定義し、各言語のコードを生成(protoc --go_out/--go-grpc_out等)。Rust/Java/Go で実装。- エラーコードは17個に標準化されている。
- ドキュメントは公式仕様にないが protoc-gen-doc で生成可能。
ブラウザ対応
ブラウザは HTTP/2 を強制できないため gRPC-Web では HTTP/1.1↔HTTP/2 変換プロキシが必要。protobuf on HTTP/1.1 を選ぶ構成もある。
API設計一般
- IDL(Interface Definition Language)はインターフェース定義言語の総称。ブラウザAPIには Web IDL がある。
- 要件記述語は RFC2119(MUST/SHOULD/MAY)。エラー設計は Google API Design Guide が参考。
- リアルタイム双方向は WebSocket(HTTP 上の双方向プロトコル、
Upgrade: websocketで 101 Switching Protocols)。
関連
- software-architecture-characteristics(サービス間通信・Saga) / graphql
原典メモ(notes/gRPC より統合)
gRPC
docs
- 公式で定められてはいない
エラーコード
17個ある
grpc-go/codes.go at master · grpc/grpc-go · GitHub
実装
- 少人数での爆速開発を目指してgolang×GCPの技術選定をした話
- gRPC はブラウザがHTTP2を強制できないのでHTTP1.1から変換するためのプロキシが必要になる
- のでprotocol buffers on HTTP/1.1を採用
- ってなんだろう
- gRPC はブラウザがHTTP2を強制できないのでHTTP1.1から変換するためのプロキシが必要になる
2023-01-29
Golang のprocobuf生成
#!/bin/sh
set -xe
# go_out: リクエスト, レスポンス
# gp_grpc_out: サービス部分
protoc homvm.proto \
-I=proto/ \
--go_out=./proto \
--go_opt=paths=source_relative \
--go-grpc_out=./proto \
--go-grpc_opt=paths=source_relative