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

Posted

技术标签:

【中文标题】无法使用 graphq-request 表示嵌套对象输入类型的数组【英文标题】:Unable to represent an array of nested object input type using graphq-request 【发布时间】:2021-04-04 23:05:24 【问题描述】:

我一直使用 graphql-request 库作为我的 GraphQL 客户端选择,从第一印象开始,一切都很简单,直到我开始发送一个嵌套的对象数组,从而用 GraphQL 文档变量表示数据模式。通常使用 apollo,您可以在查询和突变之前定义数据模式和类型,但我不确定如何使用 graphql-request 库来做到这一点。

实际数据是这样的

const contacts = [
  
    recordID: '4B6987A1-4179-426A-B38A-8B122995D0F8:ABPerson',
    givenName: 'test',
    phoneNumbers: [
      
        label: 'mobile',
        number: '123456789',
      ,
    ],
  
]

变异看起来像这样

const TEST_MUTATION = gql`
  mutation TestMutation($contacts: /* how to define the type of the data here???*/) 
    testMutation(contacts: $contacts) 
      recordID,
      givenName,
      phoneNumbers 
        label,
        number
      
    
  
`;

如果这个问题让您感到困惑,是否有办法让 graphql-request 库可以定义输入类型并获得像 apollo 这样的类型?

【问题讨论】:

【参考方案1】:

apollo-clientgraphql-request 都是发出标准 GraphQL 请求的 GraphQL 客户端——无论您使用什么客户端(或者如果您使用 fetchcurl 或其他一些客户端发出请求,您的查询都是相同的其他方式)。

变量$contacts 被用作testMutation 字段上的contacts 参数的值,因此其类型必须与该参数的类型匹配。换句话说,无论contacts 的类型是什么,都必须是$contacts 变量的类型。什么类型完全取决于您将查询发送到的端点的架构。您可以通过检查架构或参考 API 的文档来找出答案。如果您还对服务器进行了编码,那么您应该已经知道类型。

【讨论】:

首先感谢您的回复,让我换一种说法。如果你真的想通过假设一种类型,我们可以做类似$contacts: String! 的事情,但是当我们定义嵌套数据的类型时,我想做类似$contacts: Contacts! 的事情,其中​​预先定义了联系人类型。像这样:类型移动标签:字符串号码:字符串类型联系人记录ID:字符串!给定名称:字符串电话号码:[手机!]! 在后端,创建模式时,您使用input object types 表示复杂的输入值。您将定义一个输入对象类型并将contacts 参数的类型分配给该类型。 如果这是您问题的核心,您应该重写您的帖子,因为这是一个特定于后端的问题,与 graphql-request 无关。

以上是关于无法使用 graphq-request 表示嵌套对象输入类型的数组的主要内容,如果未能解决你的问题,请参考以下文章

由于嵌套 bean,无法在 playframework 中使用 GSON 解析 JSON

如何根据 R 中 ggplot2 表示的其他因素的水平(嵌套排序)对因素的水平进行排序

MongoError:在对嵌套文档中的记录进行分组时,无法从缺少的 BSON 类型转换为日期

Dojo 增强网格嵌套排序无法排序

嵌套循环:置换由向量表示的 n 维数组

从嵌套对象中提取值并使用 LINQ 对它们进行排序