Graphql-query
GraphQL-クエリ
GraphQL操作は、読み取り操作または書き込み操作のいずれかです。 GraphQLクエリは値の読み取りまたはフェッチに使用され、突然変異は値の書き込みまたはポストに使用されます。 どちらの場合でも、操作はGraphQLサーバーが特定の形式のデータで解析して応答できる単純な文字列です。 モバイルおよびWebアプリケーションで通常使用される一般的な応答形式はJSONです。
クエリを定義する構文は次のとおりです-
以下はクエリの例です-
上記の例から、クエリキーワードがオプションであることは明らかです。
GraphQLクエリは、データの過剰なフェッチを減らすのに役立ちます。 Restful APIとは異なり、GraphQLでは、ユーザーはサーバーから取得するフィールドを制限できます。 これは、ネットワーク上のクエリが小さくなり、トラフィックが少なくなることを意味します。これにより、応答時間が短縮されます。
図1-カスタムフィールドを使用した学生モデルのクエリ
この例では、jsonファイルに格納された学生のセットがあります。 各学生モデルには、firstName、lastName、idなどのフィールドがありますが、fullNameはありません。 ここでは、すべての学生のfullNameを取得するクエリを作成する方法について説明します。 そのためには、両方のスキーマリゾルバーでfullNameフィールドを作成する必要があります。
以下の手順を使用してこの図を行う方法を見てみましょう-
ステップ1-プロジェクトに必要な依存関係をダウンロードしてインストールする
ステップ2-スキーマを作成する
プロジェクトフォルダquery-appに schema.graphql ファイルを追加し、次のコードを追加します-
ステップ3-リゾルバーを作成する
プロジェクトフォルダにファイル resolvers.js を作成し、次のコードを追加します-
ステップ4-アプリケーションを実行する
ブラウザーを開き、URL http://localhost:9000/graphiql を入力します。 エディタで次のクエリを入力します-
クエリの応答は以下のとおりです-
ターミナルでコマンドnpm startを実行します。 サーバーは9000ポートで稼働します。 ここでは、GraphiQLをクライアントとして使用して、アプリケーションをテストします。
ブラウザを開き、URL http://localhost:9000/graphiql を入力します。 エディタで次のクエリを入力します-
クエリの応答は以下のとおりです-
図2-ネストされたクエリ
学生の詳細と大学の詳細を取得するためのネストされたクエリを作成しましょう。 同じプロジェクトフォルダーで作業します。
ステップ1-スキーマの編集
スキーマファイルには既に_student_フィールドがあります。 フィールドカレッジを追加して、そのタイプを定義しましょう。
ステップ2-resolver.jsを変更する
以下のように大学リゾルバ関数を追加する必要があります。 大学リゾルバ関数は、返された各学生オブジェクトに対して実行されます。 この場合のリゾルバーのルートパラメーターには、_student_が含まれます。
リゾルバは、カレッジコレクションのgetメソッドを呼び出して_collegeId_を渡すことにより、各学生のカレッジを返します。 _collegeId_を介してStudentとCollegeの間に関連付け関係があります。
ステップ3-アプリケーションをテストする
ターミナルウィンドウを開き、プロジェクトフォルダーに移動します。 コマンド-npm startを入力します。 ブラウザを起動し、URL http://localhost:9000/graphiql を入力します。
GraphiQLウィンドウで次のクエリを入力します-
クエリの応答は以下のとおりです-
クエリ変数とは何ですか?
クエリに渡す動的な値がある場合、変数を使用してこれらの動的な値を表します。 したがって、クライアントアプリケーションでクエリを再利用できます。
図
クエリ変数を理解するための簡単なアプリケーションを作成しましょう。
ステップ1-スキーマファイルの編集
文字列パラメーターを取り、文字列を返す_sayHello_フィールドを追加します。 クライアントアプリケーションでは、名前の値は動的になります。
ステップ2-resolver.jsファイルの編集
以下のようにパラメータを取る_sayHello_リゾルバを追加します-
ステップ3-GraphiQLでクエリ変数を宣言する
変数は、変数名の後に$を付けて宣言されます。 例:$ myname_Variable。
$ myname_Variableを宣言したら、名前付きクエリ構文で使用する必要があります。 クエリ、myQueryは文字列値を取り、以下に示すようにsayHelloに渡します-
GraphiQLクライアントのQuery Variablesセクションで、$ myname_Variableの値をJSONオブジェクトとして設定します。
上記のコードの出力は次のとおりです-
Enumでクエリ変数を使用する方法
フィールドパラメータが enum type の場合のクエリ変数の使用方法を見てみましょう。
ステップ1-schema.graphqlファイルの編集
_setFavouriteColor_関数は、enumを入力として受け取り、文字列値を返します。
ステップ2-resolvers.jsファイルの編集
リゾルバー関数_setFavouriteColor_は、_root_と_args_を取ります。 実行時に関数に渡される列挙値には、argsパラメーターを使用してアクセスできます。
ステップ3-GraphiQLでクエリ変数を宣言する
クエリの名前は query_to_setColor で、ColorTypeの名前color_variableの変数を取ります。 この変数は、setFavouriteColorメソッドに渡されます。
GraphiQLのクエリ変数セクションで、次のコードを入力します-
応答は以下に示されています-