リゾルバ は、スキーマ内の 1 つのフィールドの値を生成する関数です。GraphQL はクエリをフィールドごとにたどり、それぞれに対応するリゾルバを呼び出します。そのたどりが リゾルバチェーン です。
4 つのリゾルバ引数
すべてのリゾルバは (parent, args, context, info) を受け取ります:
user.posts を解決するときの User オブジェクト)。{ id: "1" })。const resolvers = {
Query: {
// top-level: parent is undefined; read args, use context for data access
user: (_parent, args, ctx) => ctx.db.users.findById(args.id),
},
User: {
// runs for EACH user; parent is the resolved user object
posts: (parent, _args, ctx) => ctx.db.posts.findByAuthor(parent.id),
// no resolver needed for 'name' -> the default resolver reads parent.name
},
};
フィールドに明示的なリゾルバがない場合、GraphQL は単に parent[fieldName] を読み取る デフォルトリゾルバ を使います。これが、プレーンなオブジェクト上のスカラーフィールドに通常コードが不要な理由です。
リゾルバが フィールドごとに、トップダウンで、parent チェーンをたどって 実行されると理解していれば、ネストしたデータがどう組み立てられるか、そしてなぜ素朴なネストリゾルバが N+1 問題を引き起こすか — 面接での自然な次の質問 — の両方を説明できます。