无法使用 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-client
和 graphql-request
都是发出标准 GraphQL 请求的 GraphQL 客户端——无论您使用什么客户端(或者如果您使用 fetch
、curl
或其他一些客户端发出请求,您的查询都是相同的其他方式)。
变量$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 表示的其他因素的水平(嵌套排序)对因素的水平进行排序