GraphQL-リゾルバー
Resolverは、GraphQLクエリの応答を生成する関数のコレクションです。簡単に言うと、リゾルバーはGraphQLクエリハンドラーとして機能します。GraphQLスキーマのすべてのリゾルバー関数は、以下に示す4つの位置引数を受け入れます-
fieldName:(root, args, context, info) => { result }
リゾルバ関数の例を以下に示します-
//resolver function with no parameters and returning string
greeting:() => {
return "hello from TutorialsPoint !!!"
}
//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);
}
以下に、位置引数とその説明を示します-
シニア番号 | 引数と説明 |
---|---|
1 | root 親フィールドのリゾルバーから返された結果を含むオブジェクト。 |
2 | args クエリのフィールドに渡された引数を持つオブジェクト。 |
3 | context これは、特定のクエリですべてのリゾルバーによって共有されるオブジェクトです。 |
4 | info これには、フィールド名、ルートからフィールドへのパスなど、クエリの実行状態に関する情報が含まれています。 |
リゾルバ結果フォーマット
GraphQLのリゾルバーは、以下に示すようにさまざまなタイプの値を返すことができます。
シニア番号 | 引数と説明 |
---|---|
1 | null or undefined これは、オブジェクトが見つからなかったことを示します |
2 | array これは、フィールドの結果がリストである必要があることをスキーマが示している場合にのみ有効です。 |
3 | promise リゾルバーは、データベースやバックエンドAPIからのフェッチなどの非同期アクションを実行することが多いため、promiseを返すことができます。 |
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
}
スキーマファイルは、ユーザーが挨拶、学生、studentByIdをクエリできることを示しています。特定のIDを持つ学生を取得するには、data type ID!これは、NULL不可の一意の識別子フィールドを示しています。学生のフィールドには、学生の配列を返し、挨拶返します単純な文字列値を。
ステップ3-リゾルバーを作成する
ファイルを作成する resolvers.js プロジェクトフォルダに次のコードを追加します-
const db = require('./db')
const Query = {
//resolver function for greeting
greeting:() => {
return "hello from TutorialsPoint !!!"
},
//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から取得できます。rootには、Queryオブジェクト自体が含まれます。特定の学生を返すには、studentsコレクションのidパラメーターを指定してgetメソッドを呼び出す必要があります。
ここで、greeting、students、studentByIdは、クエリを処理するリゾルバーです。students resolver functionデータアクセス層から学生のリストを返します。モジュールの外部でリゾルバー関数にアクセスするには、module.exportsを使用してQueryオブジェクトをエクスポートする必要があります。
ステップ4-アプリケーションを実行する
server.jsファイルを作成します。環境設定の章のステップ8を参照してください。ターミナルでコマンドnpmstartを実行します。サーバーは9000ポートで稼働します。ここでは、アプリケーションをテストするためのクライアントとしてGraphiQLを使用します。
ブラウザを開いてURLを入力し、 http://localhost:9000/graphiql。エディタに次のクエリを入力します-
{
studentById(id:"S1001") {
id
firstName
lastName
}
}
上記のクエリの出力は次のとおりです-
{
"data": {
"studentById": {
"id": "S1001",
"firstName": "Mohtashim",
"lastName": "Mohammad"
}
}
}