文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
二、GraphQl 类型系统
2.1 GraphQl 类型
可以将 GraphQL 的类型系统分为 标量类型
(ScalarTypes,标量类型)和其他 高级数据类型
,标量类型即可以表示最细粒度数据结构的数据类型,可以和 JavaScript 的原始类型对应
GraphQL 规范目前规定支持的标量类型有
- Int:有符号
32
位整数 –GraphQLInt
- Float:有符号双精度浮点值 –
GraphQLFloat
- String:
UTF‐8
字符序列 –GraphQLString
- Boolean:
true
或者false
–GraphQLBoolean
- ID(GraphQLID):ID 标量类型表示一个唯一标识符,通常用以重新获取对象或者作为缓存中的键。ID 类型使用和 String 一样的方式序列化;然而将其定义为 ID 意味着并不需要可读型。
GraphQL 其他高级数据类型包括
- Object:对象(newGraphQLObjectType)
用于描述层级或者树形数据结构。对于树形数据结构来说,叶子字段的类型都是标量数据类型。几乎所有 GraphQL 类型都是对象类型。Object 类型有一个 name 字段,以及一个很重要的 fields 字段。fields 字段可以描述出一个完整的数据结构。例如一个表示地址数据结构的 GraphQL 对象为
const AddressType=newGraphQLObjectType({ name:'Address', fields:{ street:{ type:GraphQLString }, number:{ type:GraphQLInt }, formatted:{ type:GraphQLString, resolve(obj){ return obj.number+''+obj.street } } } });
Interface
:接口用于描述多个类型的通用字Union
:联合类型用于描述某个字段能够支持的所有返回类型以及具体请求真正的返回类型Enum
:枚举用于表示可枚举数据结构的类型InputObject
:输入对象List
:列表
列表是其他类型的封装,通常用于对象字段的描述。例如下面 PersonType 类型数据的 parents 和 children 字段
const PersonType=newGraphQLObjectType({ name:'Person', fields:()=>({ parents:{type:newGraphQLList(Person)}, children:{type:newGraphQLList(Person)}, }) })
Non-Null
:不能为Null
Non-Null
强制类型的值不能为 null
,并且在请求出错时一定会报错。可以用于必须保证值不能为 null
的字段。例如数据库的行的 id 字段不能为 null
const RowType=newGraphQLObjectType({ name:'Row', fields:()=>({ id:{ type:newGraphQLNonNull(GraphQLString) } }) })
2.2 GraphQl 查询语言
GraphQL 规范支持两种操作
query
:仅获取数据(fetch
)的只读请求mutation
:获取数据后还有写操作的请求
新版本的 GraphQL 还支持 subscription
,这是为了处理订阅更新这种比较复杂的实时数据更新场景而设计的操作
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论