Graphql-resolver

提供:Dev Guides
移動先:案内検索

GraphQL-リゾルバー

リゾルバーは、GraphQLクエリの応答を生成する関数のコレクションです。 簡単に言えば、リゾルバーはGraphQLクエリハンドラーとして機能します。 GraphQLスキーマのすべてのリゾルバ関数は、以下に示す4つの位置引数を受け入れます-

fieldName:(root, args, context, info) => { result }

リゾルバ関数の例を以下に示します-

//resolver function  with no parameters and returning string
greeting:() => {
   return "hello from  finddevguides !!!"
}

//resolver function with no parameters and returning list
students:() => db.students.list()

//resolver function with arguments and returning object
studentById:(root,args,context,info) => {
   return db.students.get(args.id);
}

以下は、位置引数とその説明です-

Sr.No. Arguments & Description
1

root

親フィールドのリゾルバーから返された結果を含むオブジェクト。

2

args

クエリのフィールドに渡される引数を持つオブジェクト。

3

context

これは、特定のクエリのすべてのリゾルバーによって共有されるオブジェクトです。

4

info

これには、フィールド名、ルートからフィールドへのパスなど、クエリの実行状態に関する情報が含まれています。

リゾルバー結果の形式

GraphQLのリゾルバは、以下に示すように異なるタイプの値を返すことができます-

Sr.No. Arguments and Description
1

null or undefined

これは、オブジェクトが見つからなかったことを示します

2

array

これは、スキーマがフィールドの結果がリストであることを示している場合にのみ有効です

3

promise

リゾルバは、多くの場合、データベースまたはバックエンドAPIからのフェッチなどの非同期アクションを実行するため、約束を返すことができます

4

scalar or object

リゾルバは他の値を返すこともできます

リゾルバを理解するための簡単なアプリケーションを作成しましょう。 これにより、サーバーからIDで学生を照会するためのスキーマが作成されます。 学生データはフラットファイルに保存され、 notarealdb というノードモジュールを使用してデータベースを偽造し、フラットファイルから読み取ります。

以下は、単純なアプリケーションを作成するための段階的なプロセスです-

ステップ1-プロジェクトに必要な依存関係をダウンロードしてインストールする

*resolver-app* という名前のフォルダーを作成します。 ターミナルからディレクトリを *resolver-app* に変更します。 後で、環境設定の章の手順3〜5に従います。

ステップ2-スキーマを作成する

プロジェクトフォルダresolver-appにschema.graphqlファイルを追加し、次のコードを追加します-

type Query {
   greeting:String
   students:[Student]
   studentById(id:ID!):Student
}

type Student {
   id:ID!
   firstName:String
   lastName:String
   password:String
   collegeId:String
}

スキーマファイルは、ユーザーが_greeting、students_、および_studentById_を照会できることを示しています。 特定のIDを持つ生徒を取得するには、*データ型ID!*を使用します。 _students_フィールドは生徒の配列を返し、_greeting_は単純な文字列値を返します。

ステップ3-リゾルバーを作成する

プロジェクトフォルダにファイル resolvers.js を作成し、次のコードを追加します-

const db = require('./db')
const Query = {
  //resolver function for greeting
   greeting:() => {
      return "hello from  finddevguides !!!"
   },

  //resolver function for students returns list
   students:() => db.students.list(),

  //resolver function for studentbyId
   studentById:(root,args,context,info) => {
     //args will contain parameter passed in query
      return db.students.get(args.id);
   }
}
module.exports = {Query}

ここで、_studentById_は3つのパラメーターを取ります。 この章で説明したように、_studentId_はargsから取得できます。ルートにはQueryオブジェクト自体が含まれます。 特定の生徒を返すには、studentsコレクションのidパラメーターを使用してgetメソッドを呼び出す必要があります。

ここで、_greeting、students、studentById_は、クエリを処理するリゾルバです。 * students resolver関数*は、データアクセスレイヤーから学生のリストを返します。 モジュール外のリゾルバー関数にアクセスするには、module.exportsを使用してQueryオブジェクトをエクスポートする必要があります。

ステップ4-アプリケーションを実行する

server.jsファイルを作成します。 環境設定の章の手順8を参照してください。 ターミナルでコマンドnpm startを実行します。 サーバーは9000ポートで稼働します。 ここでは、GraphiQLをクライアントとして使用して、アプリケーションをテストします。

ブラウザを開き、URL http://localhost:9000/graphiql を入力します。 エディタで次のクエリを入力します-

{
   studentById(id:"S1001") {
      id
      firstName
      lastName
   }
}

上記のクエリの出力は以下のとおりです-

{
   "data": {
      "studentById": {
         "id": "S1001",
         "firstName": "Mohtashim",
         "lastName": "Mohammad"
      }
   }
}