Shikata Ga Nai

Private? There is no such things.

GraphQLについてまとめてみた

Hello there, ('ω')ノ

GraphQLの基本とは?

GraphQLはその名前の通り、APIが提供するデータを「クエリ(質問)」するための言語です。ただし、これは単なる言語ではなく、API通信を成功させるための一連のルール(プロトコル)を含んでいます。

  • 開発の歴史:
    • 2012年: Meta(当時はFacebook)が開発。
    • 2015年: オープンソース化。
    • 2018年: Linux Foundationがホストし、GraphQL Foundationの管理下に。

GraphQLの特徴

1. 単一のエンドポイント

GraphQLでは、1つのエンドポイント(URL)を通じてすべてのリクエストが処理されます。これにより、複数のエンドポイントを使い分ける手間が省けます。

2. 柔軟なリクエスト

GraphQLでは、必要なデータだけをリクエストできます。従来のREST APIでは、不要なデータも含めて一度に送られることが多いですが、GraphQLでは「必要なデータだけ」を正確に指定できます。

3. 双方向通信

GraphQLはWebSocketという技術を利用して、クライアントとサーバの双方向通信をサポートします。この仕組みを使うと、サーバーからクライアントへ通知を送ることができ、リアルタイムで情報を更新できます。

例: 通貨レートアプリ

  • クライアントが現在の為替レートをサーバに問い合わせます。
  • レートが変動すると、サーバがクライアントに新しいレートを通知します。

GraphQLのリクエストとレスポンス例

以下は、GraphQLで学生情報を問い合わせるリクエストとその応答の例です。

リクエスト

{
  student(id: 100) {
    name
    grade(average: true)
  }
}

リクエスト内容

  • 学生IDが100の学生情報をサーバに問い合わせます。
  • 必要なデータは「名前」と「平均成績(average: true)」です。

レスポンス

{
  "data": {
    "student": {
      "name": "Mauricio Harley",
      "grade": 85.2128
    }
  }
}

レスポンス内容

  • サーバーから返されたデータは、リクエストと同じ構造で返されます。
    • 学生の名前: "Mauricio Harley"
    • 平均成績: 85.2128

GraphQLのスキーマ

GraphQLにはスキーマという仕組みがあります。スキーマとは、サーバが提供するデータの構造を定義するものです。これにより、開発者は事前にどんなデータが取得できるかを確認しながらクエリを設計できます。

スキーマのメリット

  • データの予測性: どのデータが返ってくるかが明確。
  • 効率的なクエリ: 必要なデータだけを効率よく取得可能。
  • リストの応答: 単一のクエリで複数のアイテムを取得するのも簡単。

GraphQLとRESTの違い

特徴 GraphQL REST
エンドポイント数 単一エンドポイント 複数エンドポイント
データ量 必要なデータのみ 不要なデータを含むことがある
リアルタイム通信 WebSocketを利用して双方向通信が可能 リアルタイム通信は難しい
柔軟性 クエリで必要なデータを詳細に指定可能 固定的なデータ構造

まとめ

GraphQLは、API通信を柔軟で効率的にするための新しい仕組みです。特に、リアルタイム通信や必要なデータだけを取得できる点が特徴で、複雑なアプリケーションにおいてその真価を発揮します。

Best regards, (^^ゞ