什么';GraphQL查询和对象字段之间的编程差异是什么?

什么';GraphQL查询和对象字段之间的编程差异是什么?,graphql,apollo-server,graphql-tools,Graphql,Apollo Server,Graphql Tools,有人知道我如何通过编程区分graphql查询和字段吗?我说的是: type User { id: ID! <-- this would be a field } type Query { getUsers: [User]! <-- this would be a query } 输入用户{ id:id!在查看了所有可能的控制台日志后,我想我可能已经找到了它,因此如果有人感兴趣: 一个名为getUsers的查询,如果定义为: type Query { getUsers

有人知道我如何通过编程区分graphql查询和字段吗?我说的是:

type User {
  id: ID! <-- this would be a field
}

type Query {
  getUsers: [User]! <-- this would be a query 
}
输入用户{

id:id!在查看了所有可能的控制台日志后,我想我可能已经找到了它,因此如果有人感兴趣:

一个名为
getUsers
的查询,如果定义为:

type Query {
  getUsers: [User]!
}
将有一个
Query
parentType
。与突变类似,其
parentType
Mutation
。您可以通过以下方式在解析器(或扩展解析器的指令)中访问它:


将需要进一步研究这一点,看看它是否适用于每个场景,但理论上应该如此。如果我发现该方法存在任何问题,我将发表评论。

GraphQL支持三种类型的操作——查询、突变和订阅。单个模式必须支持查询,但其他两种类型是可选的。对于每种类型模式支持的操作,它定义一个类型作为该操作的根。我们将这三种类型称为根操作类型。按照惯例,我们通常将这些类型命名为
Query
Mutation
Subscription
,但它们也可以有任何其他名称

如果使用SDL,我们将指定与每个操作关联的类型,如下所示:

schema {
  query SomeType
  mutation SomeOtherType
}
如果您使用的是Apollo Server,则不需要执行上述步骤,但可以执行该步骤以覆盖Apollo提供的默认值

如果您使用的是纯GraphQL.js,则根操作类型定义为模式对象的一部分:

const schema = new GraphQLSchema({
  query: SomeType,
  mutation: SomeOtherType,
})
因为
Query
Mutation
与其他类型一样是一种对象类型,所以重要的是要记住
Query
上的字段,如
getUsers
仍然只是一个字段。通俗地说,我们将这些字段称为查询(将突变根类型上的字段称为突变),但它们仍然只是字段

但是,给定一个GraphQLResolveInfo对象,您可以识别字段所属的类型,还可以识别三种根操作类型。因此,您可以执行以下操作:

const { parentType, schema } = info
const isQueryField = parentType === schema.getQueryType()

是的,我正在将
父类型
解析为字符串,并将其直接与
查询“
模式进行比较
const { parentType, schema } = info
const isQueryField = parentType === schema.getQueryType()