将输入类型用于 graphql 查询是一种不好的做法吗?

Pro*_*orX 6 graphql

我已经看到建议在突变的上下文中插入输入类型,但没有说明任何关于查询的内容。

例如,在学习教程中只需说:

这在突变的情况下特别有价值,您可能希望传入要创建的整个对象

我有这个查询:

type query {
    person(personID: ID!): Person
    brazilianPerson(rg: ID!): BrazilizanPerson
    foreignerPerson(passport: ID!): ForeignerPerson
}
Run Code Online (Sandbox Code Playgroud)

我不能仅仅因为字段的名称(rg,passport)而使用不同的类型,或者在查询中再添加一个类似 type 的参数,我不能只拥有Person一个 documentNr 字段并执行这样的 Input 类型?

input PersonInput {
   documentNr : ID!
   type: PersonType # this type is Foreign or Brazilian and with this I k 
}
Run Code Online (Sandbox Code Playgroud)

PersonType 是一个枚举,和他一起我知道文件是 rg 还是护照。

Dan*_*den 7

不,您的方法没有任何不正确之处。GraphQL 规范允许任何字段有一个参数,并允许任何参数接受输入对象类型,而不管操作如何。事实上,查询和突变之间的差异在很大程度上是象征性的

值得指出的是,任何字段都可以接受参数——而不仅仅是根级别的参数。因此,如果它适合您的需求,您可以轻松设置一个允许查询的架构,例如:

query {
  person(id: 1) {
    powers(onlyMutant: true) {
      name
    }
  }
}
Run Code Online (Sandbox Code Playgroud)