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

Posted

技术标签:

【中文标题】将输入类型用于 graphql 查询是一种不好的做法吗?【英文标题】:Is it a bad practice to use an Input Type for a graphql Query? 【发布时间】:2019-09-01 09:12:52 【问题描述】:

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

例如,在learn tutorial 中说:

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

我有这个问题:

type query 
    person(personID: ID!): Person
    brazilianPerson(rg: ID!): BrazilizanPerson
    foreignerPerson(passport: ID!): ForeignerPerson

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

input PersonInput 
   documentNr : ID!
   type: PersonType # this type is Foreign or Brazilian and with this I k 

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

【问题讨论】:

【参考方案1】:

不,您的方法没有任何不妥之处。 GraphQL 规范允许 any 字段有一个参数,并允许任何参数接受输入对象类型,而不管操作如何。其实query和mutation的区别是largely symbolic。

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

query 
  person(id: 1) 
    powers(onlyMutant: true) 
      name
    
  

【讨论】:

以上是关于将输入类型用于 graphql 查询是一种不好的做法吗?的主要内容,如果未能解决你的问题,请参考以下文章

用 GraphQL 快速搭建服务端 API

GraphQL查询语言中的CSRF漏洞

何为GraphQL?

将 graphQL 片段添加到模式中,并且可用于所有查询

一种用于 API 的查询语言-GraphQL

GraphQL:在同一查询中使用输入类型及其字段之一