最近よくGraphQLを耳にしていますが、GraphQL一体何なのか気になりました。なので、GraphQLをざっくり調べた感じ、下にまとめてみました。
GitHubにも サンプルコードをプッシュしましたので、
興味ある方、是非みてみてください
GraphQLとは何か?
GraphQLはクエリ言語で、主にAPIの設計に使用され、クライアントが必要とするデータを正確に取得できる柔軟性を提供します。
GraphQLの操作方法
1. クエリ(Query)
クエリは、RESTful APIのGETリクエストに相当しますが、GraphQLでは必要なデータのみを指定して取得できる点が特徴です。
2. ミューテーション(Mutation)
ミューテーションは、RESTful APIのPOST、PUT、DELETEリクエストに相当しますが、GraphQLでは一度のリクエストで複数の操作を実行することも可能です。
3. サブスクリプション(Subscription)
サブスクリプションは、リアルタイムでデータの変更をクライアントに通知するために使用します。
これにより、クライアントはサーバーからのイベントを受け取ることができます。チャットアプリケーションやリアルタイムのデータダッシュボードなどで利用されます。
GraphQLとRESTful APIの違い
GraphQLとRESTful APIの違いは表形式でまとめてみました。
項目 | RESTful API | GraphQL |
---|---|---|
データ取得の柔軟性 | エンドポイントごとに固定されたデータ構造を提供。必要なデータ以上の情報が返されることが多く、複数のリクエストが必要になる場合がある。 | クライアントが必要とするデータを正確に指定でき、一度のリクエストで複数の関連データを取得可能。 |
エンドポイントの数 | 各リソースに対して複数のエンドポイントが存在する(例:GET /books 、POST /books 、GET /books/{id} 、PUT /books/{id} 、DELETE /books/{id} )。 |
単一のエンドポイント(通常は /graphql )で全ての操作を処理。 |
バージョニング | エンドポイントのバージョニング(例:/v1/books 、/v2/books )が一般的。 |
スキーマの進化により、バージョニングが不要。新しいフィールドや型を追加することで、既存のクエリに影響を与えずに機能を拡張可能。 |
リアルタイム通信 | ポーリングやWebSocketを使用してリアルタイム通信を実現する必要がある。 | サブスクリプション機能により、ネイティブにリアルタイム通信をサポート。 |
エラーハンドリング | HTTPステータスコードを使用してエラーを伝達。 | レスポンス内の errors フィールドを使用して詳細なエラー情報を提供。 |