Javascript GraphQL类型:什么是正确的扣合?

Javascript GraphQL类型:什么是正确的扣合?,javascript,graphql,Javascript,Graphql,官方的graphql指南和howtographql教程都没有指定一致的bucketing/类型层次结构 来自: GraphQL模式的最基本组件是对象类型 模式中的大多数类型都是普通对象类型,但模式中有两种特殊类型:查询、变异。[我的笔记:他们忘了订阅了] 除了作为模式的“入口点”,查询和变异类型与任何其他GraphQL对象类型相同,它们的字段工作方式完全相同 这就是标量类型的作用:它们表示查询的叶子 枚举类型是一种特殊的标量类型 对象类型、标量和枚举是可以在GraphQL中定义的唯一类

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

来自:

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

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

除了作为模式的“入口点”,查询和变异类型与任何其他GraphQL对象类型相同,它们的字段工作方式完全相同

这就是标量类型的作用:它们表示查询的叶子

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

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

接口是一种抽象类型

联合类型与接口非常相似

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

来自:

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

  • 标量类型

  • 对象类型

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

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

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

我的最佳猜测

  • GraphQL中仅存在两种类型:
    • 对象类型
    • 标量类型
  • 对象类型包括
    • 自定义对象类型
    • 3种特殊对象类型:查询、变异、订阅
  • 标量类型包括
    • 5个内置标量类型
    • 自定义标量类型
    • 枚举类型
  • 接口与联合
    • 这些实际上不是类型
    • 它们是用于描述对象类型的机制
  • 输入类型
    • 再说一次,实际上不是一种类型
    • 它是一种机制,通过该机制,对象和标量类型可以用作查询中的输入
问题

有没有正确的(官方的)扣子?上面我的“最佳猜测”正确吗?

图形QL有一个详细描述类型系统的列表。我会仔细阅读规范,因为它可能会回答关于GraphQL的其他问题。你应该对其他网站的声明持保留态度,因为它可能是完全错误的,使用不正确的术语,或者过于简单化(不要压倒对GraphQL不熟悉的读者)

任何GraphQL模式的基本单位都是类型。GraphQL中有六种命名类型定义和两种包装类型

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

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

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

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

联合定义了可能类型的列表;与接口类似,每当类型系统声明将返回一个union时,将返回一个可能的类型

最后,提供复杂结构作为GraphQL字段参数或变量的输入通常是有用的;输入对象类型允许模式精确定义所需的数据

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

规范还描述了
根操作类型
。有三种根操作类型--
查询
变异
订阅
。只需要
查询
。它们本身并不是独立的类型,而是模式定义中有效指向其他类型的部分。这三种类型都必须是对象类型

schema {
  query: Foo
}

type Foo {
  someField: String
}

太好了,再次谢谢。我完全同意规范通常是唯一安全的信息来源。我马上就跳进去。