GraphQL入门之Schema和类型规范

GraphQL的Schema 和类型规范

Schema 是用于定义数据结构的,比如说,User对象中有哪些属性,对象与对象之间是什么关系等。

参考官网文档:http://graphql.cn/learn/schema/

Schema定义结构

schema { #定义查询
	query: UserQuery
}
type UserQuery { #定义查询的类型
	user(id:ID) : User #指定对象以及参数类型
}
type User { #定义对象
	id:ID! # !表示该属性是非空项
	name:String
	age:Int
}

标量类型(Scalar Types)

GraphQL规范中,默认定义了5种类型:

Int :有符号 32 位整数。
Float :有符号双精度浮点值。
String :UTF‐8 字符序列。
Boolean : true 或者 false 。
ID :ID 标量类型表示一个唯一标识符,通常用以重新获取对象或者作为缓存中的键。

规范中定义的这5种类型,显然是不能满足需求的,所以在各种语言实现中,都有对类型进行了扩充,也就是GraphQL支持自定义类型,比如在graphql-java实现中增加了:Long、Byte等。

枚举类型

枚举类型是一种特殊的标量,它限制在一个特殊的可选值集合内。

enum Episode { #定义枚举
	NEWHOPE
	EMPIRE
	JEDI
}
type Human {
	id: ID!
	name: String!
	appearsIn: [Episode]! #使用枚举类型
	homePlanet: String
}

接口(interface)

跟许多类型系统一样,GraphQL 支持接口。一个接口是一个抽象类型,它包含某些字段,而对象类型必须包含这些字段,才能算实现了这个接口。

例如,你可以用一个 Character 接口用以表示《星球大战》三部曲中的任何角色:

interface Character { #定义接口
	id: ID!
	name: String!
	friends: [Character]
	appearsIn: [Episode]!
}
#实现接口
type Human implements Character {
	id: ID!
	name: String!
	friends: [Character]
	appearsIn: [Episode]!
	starships: [Starship]
	totalCredits: Int
}
type Droid implements Character {
	id: ID!
	name: String!
	friends: [Character]
	appearsIn: [Episode]!
	primaryFunction: String
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值