DjangoでGraphQLを学ぼう!〜クエリ操作〜

こんにちは。KOUKIです。

GraphQLの実装の続きです。前回は、全てのBook情報を取得できるところまで実装しました。

今回は、クエリ操作を学んでいきましょう。

記事まとめ

パラメータを渡す

現状だと、すべてのBookデータから情報を取得できますが、もう少し情報の絞り込みを行いたいと思います。

一意のBook情報を取得できるようにパラメータを渡せるようにしましょう。

一意のデータを取得するため、bookフィールドを設けました。

リクエストのパラメータはkwargsに入ってくる為、resolve_book関数にてデータの絞り込みを行っています。

それでは、「http://localhost:8080/graphql/」にアクセスして、次のクエリを実行してみましょう。

上記の通り、パラメータはサーバーサイドに実装したQueryのフィールド名にカッコ「()」をつけて指定します。

このクエリを実行すると次の結果が取得できます。

カスタムクエリフィールド

基本的にクエリに指定できるフィールドは、Django Modelに設定したフィールドになりますが、自分でカスタマイズしたフィールドに対してクエリを実行することもできます。

BookTypeに次のフィールドを追加します。

ブラウザをリロードして、次のクエリを実行してみましょう。

bookNewフィールドが新たに取得できましたね。

関連フィールドの検索

Bookモデルには、Authorモデルが紐づいています。

authorフィールドは、現状取得することができないため、この情報を取得できるようにしましょう。

ブラウザをリロードして、次のクエリを実行してみましょう。

すごく便利ですね^^

Aliaseを付ける

クエリにはAliaseを付けて、実行することができます。

下記の例では、firstbookとsecondbookがAliaseです。

Fragmentを付ける

先ほどのクエリは同じフィールド名を指定していて、少し冗長ですよね?

GraphQLでは、Fragmentで記述を簡略化できます。

fragmentキーワードと共に共通化したいクエリを括りだしています。

これらのフィールドは、BookTypeに紐づくものであるため、on XXXXで明確に指定しています。

変数の利用

GraphQLは、変数を用いることができます。

変数を表すためには、文字列の先頭に$マークを付けて宣言する必要があります。

下記の例で言うと$idが変数名です。

ブラウザ上のGraphiQLに「QUERY VARIABLES」項目があると思いますので、そこに変数の値を設定してください。

クエリを実行してみましょう。

これで、処理の中でも利用しやすくなりましたね。

条件分岐

GraphQLでは、条件分岐にも対応しています。

「QUERY VARIABLES」には、次の値を設定します。

以下、出力結果です。

次回

次回は、Mutationを学びましょう。

参考書籍


コメントを残す