GraphQL-はじめに
GraphQLは、RESTfulAPI呼び出しを最適化するためにFacebookによって開発されたオープンソースのサーバーサイドテクノロジーです。これは、実行エンジンであり、データクエリ言語です。この章では、GraphQLを使用する利点について説明します。
GraphQLが選ばれる理由
RESTful APIは、明確で適切に構造化されたリソース指向のアプローチに従います。ただし、データがより複雑になると、ルートは長くなります。1回のリクエストでデータを取得できない場合があります。ここでGraphQLが便利です。GraphQLは、データをトラバース、取得、および変更するための強力なクエリ構文を使用して、グラフの形式でデータを構造化します。
以下は、GraphQLクエリ言語を使用する利点です-
あなたが欲しいものを尋ねてください-そしてそれを手に入れてください
GraphQLクエリをAPIに送信して、必要なものを正確に取得します。GraphQLクエリは、常に予測可能な結果を返します。GraphQLを使用するアプリケーションは、高速で安定しています。Restfulサービスとは異なり、これらのアプリケーションはサーバーからフェッチする必要のあるデータを制限できます。
次の例は、これをよりよく理解するのに役立ちます-
属性id、firstName、lastName、collegeNameを持つビジネスオブジェクトStudentについて考えてみましょう。モバイルアプリケーションがfirstNameとidのみをフェッチする必要があるとします。/ 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とインテリジェントコード補完機能をテストするためのクエリエディターも提供します。