面接問題:内部API設計で REST / gRPC / GraphQL どれを選ぶ?¶
条件¶
- 複数チームが利用する内部 API
- 低レイテンシが必要
- 強い型付けが必要
- 後から変更しにくい(スキーマの安定性が重要)
比較¶
| 観点 | REST | gRPC | GraphQL |
|---|---|---|---|
| レイテンシ | 中 | 低(HTTP/2 + Protobuf) | 中〜高 |
| 型の強さ | 弱(OpenAPI で補完) | 強(Protobuf IDL) | 強(Schema) |
| スキーマ安定性 | 変更しやすい(良し悪しあり) | 後方互換設計が必要 | フィールド追加は容易 |
| 多言語対応 | ◎ | ◎(コード生成) | ○ |
| ブラウザ対応 | ◎ | △(gRPC-Web が必要) | ◎ |
| ストリーミング | △ | ◎(双方向ストリーム) | ○(Subscription) |
この条件への回答¶
gRPC が最適解 - 低レイテンシ → Protobuf + HTTP/2 で実現 - 強い型付け → IDL でスキーマをコード化し、破壊的変更をビルド時に検出 - 内部 API なのでブラウザ対応不要 - 複数チームの多言語環境でもコード生成で型安全なクライアントが作れる
ポイント¶
- 外部公開 API や BFF では REST/GraphQL が依然有力
- チームが Protobuf に慣れていない場合の学習コストは考慮する
- 「後から変更しにくい」という要件は gRPC の後方互換ルール(フィールド番号を変えない等)で対応