Graphql-resolver
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"
}
}
}