REST API vs GraphQL
20年以上の歴史を持つRESTと、Facebook発のGraphQLを比較。モバイルアプリのバックエンドには、どちらのAPI設計パラダイムを選ぶべきか?
TypeScript向けのエンドツーエンド型安全API
2000年以降の言語非依存な業界標準
| カテゴリー | tRPC | REST |
|---|---|---|
| パフォーマンス | 9/10 | 9/10 |
| 学習のしやすさ | 8/10 | 10/10 |
| エコシステム | 8/10 | 10/10 |
| コミュニティ | 9/10 | 10/10 |
| 求人市場 | 7/10 | 10/10 |
| 将来性 | 8/10 | 8/10 |
// server/router.ts
export const appRouter = t.router({
getUser: t.procedure
.input(z.object({ id: z.string() }))
.query(async ({ input }) => {
return await db.user.findUnique({ where: { id: input.id } });
}),
});
// client (type-safe, autocomplete!)
const user = await trpc.getUser.query({ id: "123" });
// user.name, user.email — fully typed// OpenAPI-first
GET /api/users/:id
Response: { "id": "123", "name": "Ali", "email": "..." }
// Client (manual type def veya codegen)
const res = await fetch("/api/users/123");
const user: User = await res.json(); // Manual type assertionTypeScriptフルスタックのモノレポならtRPC(型安全性の面で最良)。パブリックAPI+多言語クライアントならREST。GraphQLは中間的な選択肢 — 型安全かつ言語非依存だが複雑さが高い。ハイブリッド戦略として、内部はtRPC、公開向けはRESTファサードという構成もある。
無料相談を受けるGraphQLは別のデザインパラダイム — クエリ言語です。tRPC vs RESTはTypeScript vs 汎用性の比較です。GraphQLはハイブリッド戦略として組み込むこともできます。