🔮
RESTとGraphQLの比較
1. RESTの特徴
特徴
- リソースベース: URL(エンドポイント)ごとに特定のリソース(例: ユーザー、商品)を扱います。
- HTTPメソッド: データ操作には、GET、POST、PUT、DELETEなどの標準メソッドを使用します。
- 固定されたレスポンス: クライアントはリソース全体または定義済みの部分を取得しますが、不要なデータも含まれることがあります。
RESTの例
エンドポイント:
- GET /users: すべてのユーザーを取得。
- GET /users/1: IDが1のユーザーを取得。
- POST /users: 新しいユーザーを作成。
実装例(JavaScriptでAPIリクエスト)
// ユーザー一覧を取得する
fetch("https://example.com/api/users")
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error("Error:", error));
// 新しいユーザーを作成する
fetch("https://example.com/api/users", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({ name: "Alice", age: 25 })
})
.then(response => response.json())
.then(data => console.log("User created:", data))
.catch(error => console.error("Error:", error));
2. GraphQLの特徴
特徴
- クエリベース: 必要なデータだけを柔軟に取得できます。
- 単一のエンドポイント: 通常、/graphql の1つのエンドポイントだけで処理します。
- 型システム: サーバーはデータの構造(スキーマ)を定義し、クライアントがそれに基づいてクエリを送ります。
GraphQLの例
クエリ
query {
user(id: 1) {
name
age
}
}
実装例(JavaScriptでGraphQLリクエスト)
const query = `
query {
user(id: 1) {
name
age
}
}
`;
fetch("https://example.com/graphql", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({ query })
})
.then(response => response.json())
.then(data => console.log(data.data))
.catch(error => console.error("Error:", error));
RESTとGraphQLの違いを比較
特徴 | REST | GraphQL |
---|---|---|
エンドポイント | 複数(例: /users, /posts) | 単一(例: /graphql) |
データ量 | 不要なデータも含まれることがある | 必要なデータだけを取得できる |
柔軟性 | 固定的なレスポンス | クライアント側でクエリをカスタマイズ |
学習コスト | 比較的簡単 | 初期設定やスキーマ定義が必要 |
簡単な例で考える
RESTの場合
- クライアント: 「ユーザーの名前と年齢が欲しい」
- レスポンス: サーバーは/users/1から全データを返す。
GraphQLの場合
- クライアント: 「ユーザーの名前と年齢だけ欲しい」
- レスポンス: 必要なデータだけ返す(無駄が少ない)。
REST(Representational State Transfer)とGraphQLは、どちらもサーバーとクライアント間でデータをやり取りするための仕組みですが、アプローチが異なります。
RESTはシンプルで導入しやすく、GraphQLは柔軟性が高いので複雑な要件に適しています。
参考
Discussion