正式的graphql指南和howtographql教程都没有指定一致的存储/类型层次结构。
GraphQL模式的最基本组成部分是对象类型
...
模式中的大多数类型将只是普通的对象类型,但是模式中有两种特殊的类型:查询,突变。 [我的笔记:他们在这里忘记了订阅]
...
除了作为架构的“入口点”之外,Query和Mutation类型与任何其他GraphQL对象类型相同,并且它们的字段完全一样地工作
...
这就是标量类型出现的地方:它们代表查询的叶子
...
枚举类型是一种特殊的标量
...
对象类型,标量和枚举是您可以在GraphQL中定义的唯一类型。 [我的笔记:这并不完全正确,因为枚举是特殊的标量类型]
...
接口是抽象类型
...
联合类型与界面非常相似
...
输入类型看起来与常规对象类型完全相同,但是关键字输入而不是类型
来自HowToGraphQL :
在GraphQL中,有两种不同类型的类型。
标量类型
对象类型
...
枚举是特殊的标量类型。
...
可以使用接口以抽象方式描述类型。
...
联盟类型可以用来表示一个类型应该是其他类型的集合中的一个。
我的最佳猜测
问题
是否有正确的(官方)存储桶?我上面的“最佳猜测”正确吗?
答案 0 :(得分:1)
GraphQL有一个specification,它详细描述了类型系统。我会仔细阅读该规范,因为它可能还会回答您对GraphQL的其他问题。您应该以其他网站的陈述为准,因为这可能是完全错误的,使用了不正确的术语或过分简化(以免使GraphQL的新读者不知所措)。
任何GraphQL模式的基本单位都是类型。 GraphQL中有六种命名类型定义,以及两种包装类型。
最基本的类型是标量。标量表示原始值,例如字符串或整数。通常,标量字段的可能响应是可枚举的。在这种情况下,GraphQL提供一个Enum类型,该类型指定有效响应的空间。
标量和枚举构成响应树中的叶子;中间层是对象类型,它们定义了一组字段,其中每个字段是系统中的另一种类型,从而允许定义任意类型的层次结构。
GraphQL支持两种抽象类型:接口和联合。
接口定义字段列表;保证实现该接口的对象类型可以实现那些字段。每当类型系统声明它将返回一个接口时,它将返回一个有效的实现类型。
联合定义了可能类型的列表;与接口类似,只要类型系统要求返回联合,就将返回其中一种可能的类型。
最后,通常提供复杂的结构作为GraphQL字段参数或变量的输入很有用;输入对象类型允许模式准确定义期望的数据。
规范中提到的两种包装器类型-List
和Non-Null
将在后面描述。 List
是“一种特殊的集合类型,它声明列表中每个项目的类型”,而Non-Null
则包装一个现有的类型并使null为无效响应(默认情况下,所有类型都可以为null)。
该规范还描述了root operation types
。共有三种根操作类型-query
,mutation
和subscription
。仅需要query
。这些本身不是单独的类型,而是模式定义的有效指向其他某种类型的部分。这三个都必须是对象类型。
schema {
query: Foo
}
type Foo {
someField: String
}