【API】GraphQL - j-komatsu/myCheatSheet GitHub Wiki
GraphQL ガイド
1. GraphQLとは?
GraphQLは、Facebookが開発したデータクエリ言語であり、APIの柔軟なデータ取得を可能にします。
🏆 初学者向け:GraphQLの特徴
GraphQLは以下のような特徴を持ちます。
特徴 | 説明 |
---|---|
柔軟なデータ取得 | クライアントが必要なデータだけを取得できる |
型システム | スキーマを定義し、型を厳密に管理可能 |
1リクエストで取得 | 一度のリクエストで複数のリソースを取得可能 |
強力なクエリ | RESTのエンドポイントごとにリクエストするのではなく、一つのエンドポイントからデータを取得 |
🛠 専門者向け:RESTとの違い
graph TD;
A[REST API] -->|複数のエンドポイント| B(GET /users);
A -->|異なるリソース取得| C(GET /posts);
A -->|追加リクエストが必要| D(GET /comments);
E[GraphQL] -->|1つのエンドポイント| F(/graphql);
F -->|リクエスト時にデータ指定| G(必要なデータのみ取得);
項目 | REST API | GraphQL |
---|---|---|
データ取得 | 複数のエンドポイントが必要 | 1つのエンドポイントから取得 |
オーバーフェッチ | 必要以上のデータを取得する可能性 | 必要なデータのみ取得 |
アンダーフェッチ | 別のリクエストが必要な場合あり | 1回のリクエストで解決 |
型安全性 | エンドポイントごとに異なる | スキーマを定義し、統一的に管理 |
2. GraphQLの設定
GraphQLを利用するには、まずサーバーを設定します。以下はNode.js(Express + Apollo Server)を用いたGraphQLの設定例です。
const { ApolloServer, gql } = require('apollo-server');
// スキーマ定義
const typeDefs = gql`
type User {
id: ID!
name: String!
email: String!
}
type Query {
users: [User]
}
`;
// 仮のデータ
const users = [
{ id: '1', name: 'Alice', email: '[email protected]' },
{ id: '2', name: 'Bob', email: '[email protected]' }
];
// リゾルバ定義
const resolvers = {
Query: {
users: () => users,
},
};
// サーバー起動
const server = new ApolloServer({ typeDefs, resolvers });
server.listen().then(({ url }) => {
console.log(`🚀 Server ready at ${url}`);
});
3. GraphQLの利用方法
🎯 クエリ(データ取得)
query {
users {
id
name
email
}
}
出力結果:
{
"data": {
"users": [
{ "id": "1", "name": "Alice", "email": "[email protected]" },
{ "id": "2", "name": "Bob", "email": "[email protected]" }
]
}
}
📝 ミューテーション(データ変更)
mutation {
addUser(name: "Charlie", email: "[email protected]") {
id
name
email
}
}
4. まとめ
GraphQLは、クライアントが自由にデータを取得・変更できるAPI仕様です。RESTと比較して、
- オーバーフェッチ/アンダーフェッチの解決
- 柔軟なクエリ
- 型安全性の向上
などの利点があります。Apollo Serverを活用することで、簡単にGraphQLサーバーを構築できます。
📝 さらに学ぶ: