

プロ太先生、最近「GraphQL」という言葉をよく聞くんですが、これって何ですか?

GraphQLは、APIを作るための新しい方法なんだ。まず、APIって何か分かる?

えーっと、アプリケーション同士がデータをやり取りするための仕組みですよね?
レストランで言えば、ウェイターさんみたいなものですよね??

その通り!例えば、スマホのXアプリが、サーバーからツイートのデータを取得するときに使うのがAPIだね。
Contents
REST APIの問題点

従来は主に「REST API」というものが使われていたんだ。例えば、ユーザー情報を取得したいとき、こんな感じでリクエストを送っていた。
GET /api/users/123

シンプルですね!

でも、REST APIには問題があるんだ。例えば、ユーザーの情報と、そのユーザーが投稿した記事も一緒に取得したいとしよう。
// REST APIの場合、複数回のリクエストが必要
// 1. まずユーザー情報を取得
fetch('/api/users/123')
.then(response => response.json())
.then(user => {
console.log(user); // { id: 123, name: "山田太郎", email: "yamada@example.com" }
// 2. 次にそのユーザーの記事を取得
return fetch(`/api/users/${user.id}/posts`);
})
.then(response => response.json())
.then(posts => {
console.log(posts); // [{ id: 1, title: "記事1" }, { id: 2, title: "記事2" }]
});

あー、2回もリクエストを送らないといけないんですね。面倒そう…

そうなんだ!しかも、もしユーザー名だけ欲しい場合でも、emailやその他の不要な情報まで全部返ってきちゃう。これを「オーバーフェッチング」って言うんだ。
GraphQLの登場!

そこで登場するのがGraphQL!
GraphQLなら、1回のリクエストで必要なデータだけを取得できるんだ。
// GraphQLクエリの例
const query = `
query {
user(id: 123) {
name # 名前だけ欲しい
posts { # ユーザーの投稿も一緒に取得
title # タイトルだけ欲しい
}
}
}
`;
// 1回のリクエストで全て取得
fetch('/graphql', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ query })
})
.then(response => response.json())
.then(data => {
console.log(data);
// 結果:
// {
// "data": {
// "user": {
// "name": "山田太郎",
// "posts": [
// { "title": "記事1" },
// { "title": "記事2" }
// ]
// }
// }
// }
});

すごい!1回で済むし、欲しいデータだけ取得できるんですね!
GraphQLの特徴まとめ

GraphQLの主な特徴をまとめるとこんな感じだよ。
1. 必要なデータだけ取得(No オーバーフェッチング)
# 名前とメールアドレスだけ欲しい場合
query {
user(id: 123) {
name
email
# ageやphoneNumberは取得しない
}
}
2. 1回のリクエストで複数のリソース取得
# ユーザー情報、投稿、コメントを一度に取得
query {
user(id: 123) {
name
posts {
title
comments {
content
author {
name
}
}
}
}
}
3. 型安全性
# GraphQLでは型が明確に定義される
type User {
id: ID! # IDタイプ、必須
name: String! # 文字列、必須
age: Int # 整数、オプショナル
posts: [Post!]! # Post型の配列、必須
}
type Post {
id: ID!
title: String!
content: String!
author: User!
}

型があることで、どんなデータが返ってくるか事前に分かるんですね!

その通り!TypeScriptを使っている人には特に嬉しい機能だね。
まとめ

今日のまとめだよ。
- REST API:シンプルだけど、複数回のリクエストが必要だったり、不要なデータまで取得してしまう
- GraphQL:1回のリクエストで必要なデータだけを効率的に取得できる新しいAPI技術

GraphQLってすごく便利そうですね!でも、どうやって実際に使うんですか?

いい質問!次回は実際にGraphQLサーバーを作って、簡単なクエリを実行してみよう。お楽しみに!