最終更新:
REST・GraphQL・gRPC・tRPCの違いは?APIの選び方を比較
REST APIってもう古いの?
GraphQLは何が違うの?
RESTだと不要なデータを必ず返すの?
gRPCは何を重視しているの?
どれなら速くて安全なの?
既存のAPIは乗り換えるべきかな?
まず現在困っていることを特定しよう。画面ごとの取得形が頻繁に変わる、サービス間でストリームが必要、TypeScriptで型を共有したい、といった具体的な理由があれば検証する。流行や根拠のないシェア予測だけで移行しなくていいよ。
API方式の比較表
| 方式 | 検討する場面 | 導入前の確認 |
|---|---|---|
| REST系HTTP API | 多様な外部クライアント、リソース中心の操作 | URL・HTTPの意味、版管理、キャッシュ |
| GraphQL | 画面ごとに取得形が変わる | スキーマ、フィールド単位の認可、問い合わせコスト |
| gRPC | 型契約のあるサービス間通信、ストリーミング | クライアント生成、プロキシ、タイムアウト |
| tRPC | TypeScriptで型を共有できるアプリ | サーバー/クライアントの版、入力検証、認可 |
これは用途を限定する表ではありません。GraphQLの公開APIもありますし、内部向けREST APIも作れます。
gRPCとtRPCで迷ったら
Go・Javaなど複数言語でサービスを接続し、明示的なサービス定義を共有したい場合はgRPCを検討します。TypeScriptのフロントとバックを協調して開発し、型推論を活用したい場合はtRPCが候補です。どちらも、型定義だけでは利用者の権限を確認できません。
移行を決める小さな検証
代表的な画面1つについて、リクエスト回数、転送量、DBクエリ数、応答時間を測ります。認可違反や入力エラーも試します。GraphQLでHTTPの往復を減らせても、リゾルバーごとのDB読み取りが増えれば改善にならない場合があります。
参考資料
確認日:2026年9月26日。製品の仕様・料金・対応環境は導入時にも確認してください。
- Fielding: REST architectural style:ステートレス・キャッシュ・統一インターフェース。
- GraphQL: Queries:フィールド選択と関連データ取得。
- gRPC core concepts:サービス定義、RPCの種類、ストリーミング。
- gRPC-Web tutorial:ブラウザからのプロキシ構成。
- tRPC concepts:procedure・context・middleware・validation。