如何处理 GraphQL 中的嵌套输入

Posted

技术标签:

【中文标题】如何处理 GraphQL 中的嵌套输入【英文标题】:How to deal with nested input in GraphQL 【发布时间】:2019-02-07 21:57:23 【问题描述】:

在编写查询时,我可以在任何字段上定义解析器,并且该字段的值将由其解析器确定,而与查询深度无关。

但是,在编写突变时,我似乎只能在根级别定义解析器。向我的 args 或输入类型中的字段添加解析方法似乎没有任何影响。

在突变中处理嵌套输入的最佳方法是什么?

【问题讨论】:

【参考方案1】:

突变中的嵌套输入是什么意思? GraphQL 输入类型没有解析器。使用解析器,您只是在确定如何获取结果。如果您想要嵌套输入,例如例如,我也想与公司一起创建用户。然后我将在 SDL 中定义 CreateUserInput CreateCompanyInput 类型,例如这样

input CreateCompanyInput 
   name: String!
   type: CompanyEnum!


input CreateUserInput  
  username: String!
  firstname: String!
  lastname: String!
  company: CreateCompanyInput!


type Mutation 
  createUser(input: CreateUserInput!): User

这样我基本上是嵌套参数并且可以实现更复杂的突变。此外,如果我需要突变,我可以将CreateCompanyInput 重复用于createCompany 突变。然后,即使在 createUser 解析器中使用 CreateCompanyInput 作为输入参数,我也会拥有整个 CreateUserInput。我可以应用事务,因为我将创建两条新记录等。如果您的意思是其他意思,则不确定这是否是您所说的嵌套输入。请告诉我:)

【讨论】:

你用什么前端来查询这些?前端查询是什么样的? 这是创建用户的示例突变。 GraphQL 请求可以如下所示:`createUserMutation($input: CreateUserInput!) createUser(input: $input) id, firstname, lastname `。对于此代码,您还需要传递相应的变量。 带有mutation CreateUser createUser(input: ... ) .graphql 文件会是什么样子? 我认为他的意思是如何在 express-graphql 中做到这一点

以上是关于如何处理 GraphQL 中的嵌套输入的主要内容,如果未能解决你的问题,请参考以下文章

ApolloClient:你如何处理缓存中的规范化/嵌套?

如何处理 Vue.JS 中的 Apollo Graphql 查询错误?

无法使用 graphq-request 表示嵌套对象输入类型的数组

如何处理大型嵌套对象的缓存

如何处理嵌套的属性列表

如何处理 graphQL 突变中的 Union 或 Interface?