GraphQLクエリの構造

紳士の用語集



GraphQLの新しいデータ取得標準は、最近人気が出てきました。 現在、この技術の開発が活発に議論されており、ますます多くの新しいツールが登場しています。 GraphQLの長所の1つは、APIで利用可能なデータを記述するための汎用言語を開発チームに提供することです。 しかし、クエリ言語自体とテクノロジー全体について、どのような用語で議論すべきでしょうか?







GraphQL仕様には、 GraphQLのすべての側面に関するほぼ包括的な用語セットが含まれています。 しかし、仕様は非常に膨大です。 この記事では、具体的な例を使用して最も重要な概念と用語を見つけます。これらは専門家レベルでGraphQLを議論するのに十分です。







注-この記事は、GraphQLをゼロから学習するための最良の選択ではありません。 まず、 graphql.org資料に精通し、優れたコースでGraphQLを試し、Learn Apolloを試し、記事に戻って専門用語の言語に没頭することをお勧めします。







主要なGraphQLクエリ



多くの場合、クエリはGraphQLサーバーに送られるすべてのものです。 これについていくらか混乱があります。 サーバーが要求するタスクは何ですか? データのクエリ(クエリ)、突然変異(突然変異)、またはサブスクリプション(サブスクリプション)です。 「リクエスト」という言葉は、HTTPおよびトランスポート層の理解において、ネットワークリクエストに強く関連付けられています。 したがって、いくつかの一般的な概念から始める必要があります。









最も単純な操作は何で構成されていますか? たとえば、非常に単純なGraphQLドキュメントを取り上げます。







画像

図 単純なリクエストのコンポーネント。







以下は、要求されたデータを記述するメインのGraphQL構成体です。









上記のクエリは、GraphQLのやや省略された形式であり、データの必要性を可能な限り簡潔に表すことができます。 ただし、GraphQL操作には3つの追加部分が含まれる場合があります。 データの要求とは異なるアクションを実行する必要がある場合、または動的に生成された変数を送信する必要がある場合に使用されます。







次の例は、これらのすべての部分を示しています。







画像

図 より詳細なリクエストとそのコンポーネント。









変数は、トランスポートレベルで受け入れられる形式で、リクエストテキストとは別に送信されます。 最近のGraphQL実装では、通常JSONが使用されます。 前述のクエリでは、変数を持つオブジェクトは次のようになります。







画像

図 変数を持つオブジェクトの例。







ご覧のとおり、キーは変数の説明で指定された名前と一致します。 値は、列挙型Episode



から取得されます。









別の基本的な概念はあまり言及されていませんが、GraphQLの技術的な側面を議論する際に重要です-中括弧で囲まれているのは何ですか?







画像

用語選択セットは、GraphQL仕様で常に使用されています。 GraphQLの再帰的な性質が接続されているため、ネストされたクエリが可能です。









フラグメント



スニペットは、GraphQLにさらに多くの機能をもたらします。 しかし、新しい概念が来ています。









画像









操作でフラグメントを使用する



フラグメントは、操作以外では特に有用ではありません。 以下に示すように、フラグメントを挿入するには2つの方法があります。







画像

図 リクエスト内の2種類のフラグメント。









指令



ディレクティブを使用して、GraphQLサーバーの追加機能が実装されます。 ディレクティブは結果の値には影響しませんが、返されるデータの構成と、場合によっては受信方法に影響を与える可能性があります。 ディレクティブはクエリのほぼどこでも見つけることができますが、この記事では現在のGraphQL仕様で定義されているskipおよびincludeディレクティブについてのみ言及しています。







画像







図 示されているデザインは、1回のリクエストで見つかることはほとんどありませんが、このフォームで一度に便利にデモンストレーションされます。







この図は、 skip



およびinclude



ディレクティブを使用できる場所の無関係な例を示しています。 GraphQL実行可能ファイルの条件を設定して、フィールドを無視し、結果に値を含めません。 ディレクティブ構文は公開されており、さまざまなGraphQL実装により、クエリの解析と実行を大幅に複雑化することなく、新しい機能を追加できます。









ディスカッションに参加する



GraphQLの重要な利点は、データの取得方法を記述することができる汎用言語の存在です。 GraphQLサブスクリプションに関する継続的な議論の一環として、GraphQLについて議論するための紳士的な用語のセットができました







この記事では、QueryQL専用のGraphQL仕様の一部のみを取り上げました。 次の記事では、GraphQLスキーマを説明する用語を検討する場合があります。







GraphQLテクノロジーを日常業務で使用したいですか? フロントエンド、バックエンド、オープンソースにさまざまな欠員があります!







記事の翻訳。 Sashko Stubailoによるオリジナル








All Articles