info.fieldASTs(解析参数)来自什么地方?

What and where does the info.fieldASTs(resolve parameter) come from?

我已经阅读了很多关于 graphql 的资源,但不知何故我需要帮助来理解 graphqls 的解析参数。这是代码(来自全栈反应):

resolve(source, args, context, info) {
 let includeFriends = false;
const selectionFragments = info.fieldASTs[0].selectionSet.selections;
const userSelections = selectionFragments.filter((selection) => {
return selection.kind === 'InlineFragment' && selection.typeCondition.\
name.value === 'User';
})

希望有人能分享一些关于 graphql 的 resolve 函数的资源,这些 -> (source, args, context, info) 参数是什么?他们来自哪里?以及如何在代码中查看 fieldAST?我查看 schema.json 文件,但看不到它的来源,如何查看?

resolve 函数的目的是 return GraphQL 查询中请求的每个 字段 的数据。

what are these-> (source, args, context, info) parameters?

  • source - 从父类型的字段解析的对象
  • args - 该字段的 GraphQL 参数
  • context - 可以传递给 GraphQL 的任意上下文值
  • 信息 - a.k.a。 "resolve info" 有 一切 你可能想知道的关于 GraphQL 查询(它的 AST、片段、变量等)和正在执行的模式(字段名称、类型) , ETC)。

and where they come from? and how can I see fieldASTs on the code?

这取决于您使用的是哪种 GraphQL 实现。我假设您正在使用 the Node.js reference implenatation by Facebook. Most developers probably don't need to look at the resolve info to resolve their data, as it mostly deals with the internals. But if you want to understand how this is generated, you'll need to read the source code. Here 是在 GraphQL 的执行阶段创建解析信息的地方。

要生成您自己的 schema.json,您可以使用从 graphql/utilities 导入的 printSchema 函数:

import { graphql }  from 'graphql'
import { introspectionQuery, printSchema } from 'graphql/utilities'

/*
  generates json of our schema for use by relay
 */
export default function (schema) {
  return new Promise((resolve, reject) => {
    graphql(schema, introspectionQuery).then(result => {
      if (result.errors) {
        console.error(`ERROR introspecting schema: ${result.errors}`)
        reject(new Error(result.errors))
      } else {
        resolve({ json: result, graphql: printSchema(schema) })
      }
    })
  })
}