【问题标题】:GraphQL types: What is the correct bucketing?GraphQL 类型:什么是正确的分桶?
【发布时间】:2019-04-12 22:58:54
【问题描述】:

graphql 官方指南和 howtographql 教程都没有指定一致的分桶/类型层次结构。

来自Official "Learn" GraphQL

GraphQL 模式最基本的组件是对象类型

...

架构中的大多数类型只是普通的对象类型,但架构中有两种特殊类型:查询、突变。 [我的笔记:他们忘记订阅了]

...

除了作为模式的“入口点”之外,Query 和 Mutation 类型与任何其他 GraphQL 对象类型相同,并且它们的字段工作方式完全相同

...

这就是标量类型的用武之地:它们代表查询的叶子

...

枚举类型是一种特殊的标量

...

对象类型、标量和枚举是您可以在 GraphQL 中定义的唯一类型。 [我的笔记:这并不完全正确,因为枚举是特殊的标量类型]

...

接口是一种抽象类型

...

联合类型与接口非常相似

...

输入类型看起来与常规对象类型完全相同,但使用关键字 input 而不是 type

来自HowToGraphQL

在 GraphQL 中,有两种不同的类型。

  • 标量类型

  • 对象类型

...

枚举是一种特殊的标量类型。

...

接口可用于以抽象方式描述类型。

...

联合类型可以用来表示一个类型应该是其他类型的集合。

我的最佳猜测

  • GraphQL 中只存在 两种 类型:
    • 对象类型
    • 标量类型
  • 对象类型包括
    • 自定义对象类型
    • 3 种特殊对象类型:Query、Mutation、Subscription
  • 标量类型包括
    • 5 种内置标量类型
    • 自定义标量类型
    • 枚举类型
  • 接口和联合
    • 这些实际上是不是类型
    • 它们是用于描述对象类型的机制
  • 输入类型
    • 同样,实际上不是类型
    • 它是一种机制,通过它可以将对象和标量类型用作查询中的输入

问题

是否有正确的(官方)分桶?我上面的“最佳猜测”是否正确?

【问题讨论】:

    标签: javascript graphql


    【解决方案1】:

    GraphQL 有一个specification,它详细描述了类型系统。我会仔细阅读规范,因为它也可以回答您对 GraphQL 的其他问题。您应该对其他网站的陈述持保留态度,因为它可能是完全错误的、使用不正确的术语或过于简单化(以免让刚接触 GraphQL 的读者不知所措)。

    任何 GraphQL Schema 的基本单位都是类型。 GraphQL 中有六种命名类型定义,以及两种包装类型。

    最基本的类型是标量。标量表示原始值,如字符串或整数。通常,标量场的可能响应是可枚举的。在这些情况下,GraphQL 提供了一个 Enum 类型,该类型指定了有效响应的空间。

    标量和枚举在响应树中形成叶子;中间层是 Object 类型,它定义了一组字段,其中每个字段是系统中的另一种类型,允许定义任意类型层次结构。

    GraphQL 支持两种抽象类型:接口和联合。

    一个接口定义了一个字段列表;实现该接口的对象类型保证实现这些字段。每当类型系统声称它会返回一个接口时,它都会返回一个有效的实现类型。

    联合定义了可能的类型列表;与接口类似,只要类型系统声明将返回联合,就会返回其中一种可能的类型。

    最后,提供复杂的结构体作为 GraphQL 字段参数或变量的输入通常很有用;输入对象类型允许架构准确定义预期的数据。

    规范中提到的两种包装类型——ListNon-Null 稍后描述。 List 是“一种特殊的集合类型,它声明列表中每个项目的类型”,而 Non-Null 包装现有类型并使 null 成为无效响应(默认情况下所有类型都可以为 null)。

    规范还描述了root operation types。共有三种根操作类型——querymutationsubscription。只需要query。这些本身并不是单独的类型,而是模式定义的一部分,它们有效地指向了一些其他类型。这三个都必须是 Object 类型。

    schema {
      query: Foo
    }
    
    type Foo {
      someField: String
    }
    

    【讨论】:

    • 太棒了,再次感谢。我完全同意规范通常代表唯一安全的信息来源。我会直接跳进去。
    猜你喜欢
    • 1970-01-01
    • 2021-05-22
    • 2019-02-14
    • 2017-12-19
    • 2020-01-04
    • 2013-01-22
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    相关资源
    最近更新 更多