REST APIと何が違うの?
RESTはJSON+HTTPでテキストベースの通信。gRPCはProtobuf+HTTP/2でバイナリベースの通信。gRPCの方が①高速(シリアライズが10倍速)、②帯域効率が良い(バイナリなのでサイズが小さい)、③型安全(スキーマから自動生成されたコードを使用)。マイクロサービスの内部通信に最適だよ
Protocol Buffersって何?
Googleが開発したデータのシリアライゼーション形式だよ。.protoファイルでデータ構造を定義すると、Go、Java、Python等のコードが自動生成される。JSONに比べてサイズが小さく、パース速度も高速。「message User { string name = 1; int32 age = 2; }」のように書くんだ
ストリーミングって?
gRPCは4つの通信パターンに対応するよ。①Unary(1リクエスト→1レスポンス、REST的)、②Server streaming(1リクエスト→複数レスポンス)、③Client streaming(複数リクエスト→1レスポンス)、④Bidirectional streaming(双方向にリアルタイム通信)。チャットや監視データの配信にストリーミングが活躍するんだ
gRPCの弱点は?
①ブラウザから直接呼べない(gRPC-WebやEnvoyプロキシが必要)、②バイナリなのでcurlやPostmanでのデバッグが難しい(grpcurlやBloomRPCを使う)、③学習コストがRESTより高い。外部APIにはRESTやGraphQL、内部サービス間通信にはgRPCという使い分けが一般的だよ