Graphql-introduction
GraphQL-はじめに
GraphQLは、RESTful API呼び出しを最適化するために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エンドポイントを設計すると、_student_オブジェクトのすべてのフィールドのデータを取得することになります。 つまり、データはRESTfulサービスによって過剰に取得されます。 この問題は、GraphQLを使用して解決できます。
以下に示すGraphQLクエリを考慮してください-
{
students {
id
firstName
}
}
これは、idフィールドとfirstnameフィールドの値のみを返します。 クエリは、学生オブジェクトの他の属性の値をフェッチしません。 上記のクエリの応答は以下のとおりです-
{
"data": {
"students": [
{
"id": "S1001",
"firstName": "Mohtashim"
},
{
"id": "S1002",
"firstName": "Kannan"
}
]
}
}
1回のリクエストで多くのリソースを取得する
GraphQLクエリは、関連するビジネスオブジェクトをスムーズに取得するのに役立ちますが、一般的なREST APIは複数のURLからロードする必要があります。 GraphQL APIは、アプリケーションが必要とするすべてのデータを単一のリクエストで取得します。 GraphQLを使用するアプリケーションは、低速のモバイルネットワーク接続でも迅速に実行できます。
名前と場所の属性を持つもう1つのビジネスオブジェクト_College_を考えてみましょう。 Student_ビジネスオブジェクトには、Collegeオブジェクトとの関連付け関係があります。 学生とその大学の詳細を取得するためにREST APIを使用する場合、/api/v1/students_や_/api/v1/colleges_などの2つのリクエストをサーバーに送信することになります。 これにより、リクエストごとにデータのフェッチが不足します。 そのため、モバイルアプリケーションは、目的のデータを取得するためにサーバーに対して複数の呼び出しを行うことを強制されます。
ただし、モバイルアプリケーションは、GraphQLを使用して、単一のリクエストで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は、明示的なデータ変換と解析の削減に役立つクライアント側ライブラリも提供します。
_Student_および_College_データ型の例は以下のとおりです-
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は、クエリとそのスキーマのドキュメントを生成する優れたツールです。 また、クエリの作成中にGraphQL APIとインテリジェントなコード補完機能をテストするクエリエディタも提供します。