コンテンツにスキップ

面接問題:内部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 の後方互換ルール(フィールド番号を変えない等)で対応