GraphQL-はじめに

GraphQLは、RESTfulAPI呼び出しを最適化するためにFacebookによって開発されたオープンソースのサーバーサイドテクノロジーです。これは、実行エンジンであり、データクエリ言語です。この章では、GraphQLを使用する利点について説明します。

GraphQLが選ばれる理由

RESTful APIは、明確で適切に構造化されたリソース指向のアプローチに従います。ただし、データがより複雑になると、ルートは長くなります。1回のリクエストでデータを取得できない場合があります。ここでGraphQLが便利です。GraphQLは、データをトラバース、取得、および変更するための強力なクエリ構文を使用して、グラフの形式でデータを構造化します。

以下は、GraphQLクエリ言語を使用する利点です-

あなたが欲しいものを尋ねてください-そしてそれを手に入れてください

GraphQLクエリをAPIに送信して、必要なものを正確に取得します。GraphQLクエリは、常に予測可能な結果を​​返します。GraphQLを使用するアプリケーションは、高速で安定しています。Restfulサービスとは異なり、これらのアプリケーションはサーバーからフェッチする必要のあるデータを制限できます。

次の例は、これをよりよく理解するのに役立ちます-

属性id、firstName、lastNamecollegeNameを持つビジネスオブジェクトStudentについて考えてみましょう。モバイルアプリケーションがfirstNameidのみをフェッチする必要があるとします。/ api / v1 / studentsのようなRESTエンドポイントを設計すると、学生オブジェクトのすべてのフィールドのデータをフェッチすることになります。これは、データがRESTfulサービスによってオーバーフェッチされることを意味します。この問題は、GraphQLを使用することで解決できます。

以下に示すGraphQLクエリについて考えてみます-

{
   students {
      id
      firstName
   }
}

これにより、idフィールドとfirstnameフィールドの値のみが返されます。クエリは、学生オブジェクトの他の属性の値をフェッチしません。上に示したクエリの応答は次のとおりです-

{
   "data": {
      "students": [
         {
            "id": "S1001",
            "firstName": "Mohtashim"
         },
         {
            "id": "S1002",
            "firstName": "Kannan"
         }
      ]
   }
}

1回のリクエストで多くのリソースを取得

GraphQLクエリは、関連するビジネスオブジェクトをスムーズに取得するのに役立ちますが、通常のRESTAPIでは複数のURLからロードする必要があります。GraphQL APIは、アプリケーションに必要なすべてのデータを1回のリクエストでフェッチします。GraphQLを使用するアプリケーションは、低速のモバイルネットワーク接続でも迅速に実行できます。

名前と場所という属性を持つもう1つのビジネスオブジェクトであるCollegeについて考えてみましょう。学生のビジネス・オブジェクトには、大学のオブジェクトとの対応関係を持っています。学生とその大学の詳細を取得するためにRESTAPIを使用する場合、サーバーに対して/ api / v1 / students/ api / v1 / collegesのように2つのリクエストを行うことになります。これにより、リクエストごとにデータのフェッチが不足します。そのため、モバイルアプリケーションは、目的のデータを取得するためにサーバーに対して複数の呼び出しを行う必要があります。

ただし、モバイルアプリケーションは、GraphQLを使用して、1回のリクエストでStudentオブジェクトとCollegeオブジェクトの両方の詳細をフェッチできます。

以下は、データをフェッチするためのGraphQLクエリです-

{
   students{
      id
      firstName
      lastName
      college{
         name
         location
      }
   }
}

上記のクエリの出力には、以下に示すように、要求したフィールドが正確に含まれています。

{
   "data": {
      "students": [
         {
            "id": "S1001",
            "firstName": "Mohtashim",
            "lastName": "Mohammad",
            "college": {
               "name": "CUSAT",
               "location": "Kerala"
            }
         },
         
         {
            "id": "S1002",
            "firstName": "Kannan",
            "lastName": "Sudhakaran",
            "college": {
               "name": "AMU",
               "location": "Uttar Pradesh"
            }
         },
         
         {
            "id": "S1003",
            "firstName": "Kiran",
            "lastName": "Panigrahi",
            "college": {
               "name": "AMU",
               "location": "Uttar Pradesh"
            }
         }
      ]
   }
}

型システムで何が可能かを説明する

GraphQLは強く型付けされており、クエリはフィールドとそれに関連するデータ型に基づいています。GraphQLクエリに型の不一致がある場合、サーバーアプリケーションは明確で役立つエラーメッセージを返します。これは、クライアントアプリケーションによるスムーズなデバッグとバグの簡単な検出に役立ちます。GraphQLは、明示的なデータ変換と解析を減らすのに役立つクライアント側ライブラリーも提供します。

学生大学のデータ型の例を以下に示します-

type Query {
   students:[Student]
}

type Student {
   id:ID!
   firstName:String
   lastName:String
   fullName:String
   college:College
}

type College {
   id:ID!
   name:String
   location:String
   rating:Float
   students:[Student]
}

強力な開発者ツールでより速く移動する

GraphQLは、ドキュメント化とクエリのテストのための豊富な開発者ツールを提供します。GraphiQLは、クエリとそのスキーマのドキュメントを生成する優れたツールです。また、クエリの構築中にGraphQLAPIとインテリジェントコード補完機能をテストするためのクエリエディターも提供します。