GraphQLとは
・2015年にFacebookが開発したWeb APIの規格のひとつで『グラフキューエル』と呼ぶ。 https://graphql.org/
・API向けの言語で「クエリ言語(リクエスト)」と「スキーマ言語(APIの定義)」からなる。
GraphQLの考え方
GraphQLのAPIのアプローチはRESTとは異なり、動詞やURIなどのHTTP構造に頼らない。
直感的で柔軟な構文でわかりやすさをもつ問い合わせ言語と強力な型付けがあることによって、
クライアント/サーバー間にデータの型という堅固な共通の約束事をもつことによって必要なデータを効率よく取得できる
GraphQLの特徴/メリット
・クエリがレスポンスデータの構造と似ているため、クエリからレスポンスの構造を推測でき情報量が多い
・スキーマによる型付けにより型安全な運用ができる
・ツールによる開発サポート
GraphQL Foundationが提供する公式のツールに“GraphiQL”(グラフィクル)というIDEがある
※自動補完やコード・ドキュメントの自動生成などの恩恵を受けることができる
・GraphQLのエンドポイントは単一であり、またURLのクエリパラメータは使わずにGraphQLのQuery内に記述するのでリクエストがシンプル
※QueryはGraphQL APIが提供しているデータのうち何がほしいかを簡潔に記述したもので、HTTPリクエストのbodyに乗せて送信
GraphQLでデメリット
・GraphQL APIのHTTPエンドポイントはひとつだけでなので、全てのデータがまとめられてしまい、
パフォーマンス分析などが困難になる場合がある
・クライアントがクエリを全て指定しなければならないため、クエリが肥大化する
・階層を毎回送信するのでデバッグが困難
・クライアント側で考えなければならないことが多い

APIのインターフェイス部分(データの型)を定義できるので、
パラメーターのバリデーションチェックが出来たり、定義に則った安全な運用ができる。
また、単一エンドポイント(GraphQLスキーマ単位)でデータを一度に大量に取得できるので、
REST APIみたいにデータ取得条件に合わせてエンドポイントを大量に作成しなくて済む
でも、クエリを全て指定しなければならないため、クエリが肥大化したり、
纏められてデータを取得するのでパフォーマンス分析などが困難になる場合がある
たくさんの種類のデータをユーザーが必要に応じて、まとめて取り出す必要があるようなサービスで発揮するのかな
逆にある程度データの量が把握できるようなデータサイズが小さめのマイクロサービスなどではRESTの方に分がありそう
コメント