【问题标题】:Issue with defining a graphQL schema for an object为对象定义 graphQL 模式的问题
【发布时间】:2019-08-20 22:37:29
【问题描述】:

我有一个具有一些属性但无法定义架构的对象。 对象的结构

{
    "1": {
        average: 40,
        count: 15
    },
    "2": {
        average: 11,
        count: 2
    },
    "3": {
        average: 30,
        count: 2
    }
}

我的架构

const typeDef = gql`
 type Query {
   scoreByRank: Count
}

type Count {
  "1": obj
  "2": obj
  "3": obj
}

type obj{
average: Int
count: Int
}
`;

但是这个查询失败了,因为对象 prop 带有“1”、“2”等。有没有更好的方法来构建这个架构?

【问题讨论】:

    标签: graphql schema


    【解决方案1】:

    GraphQL 字段名称必须遵循一定的规则。特别是/^[_a-zA-Z][_a-zA-Z0-9]*$/。如您所见,字段名称不能以数字 0-9 开头。某些字段名称可能对 GraphQL API 的使用者不方便,具体取决于他们使用的语言。定义了字段名称限制,以便大多数常用语言可以轻松使用 GraphQL API 提供的数据。

    推荐的解决方案是遵循规则并提出更好的字段名称,例如_1twofield3

    您可以返回一个数组而不是一个对象,但目前还没有简单的方法来强制一个数组的特定长度。最重要的是,数组的索引将从 0 而不是 1 开始。

    您可以为您的对象定义一个自定义标量,但随后您将失去省略不必要字段的能力,并且需要更复杂的代码才能工作。因此,我认为这是不好的做法。只有在处理不灵活且不透明的第三方应用程序时才这样做。

    【讨论】:

    • 谢谢!是的,我必须将我的字段从“1”更改为“something1”。
    猜你喜欢
    • 2021-12-23
    • 2016-07-08
    • 2021-12-15
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    • 1970-01-01
    相关资源
    最近更新 更多