概述
GraphQL规范-API查询语言
GraphQL本质上是一个关于对象上特定字段的查询语言,与restful架构对每一个请求的资源都有一个端点(endpoint)不同,GraphQL只有一个端点,客户端可以自由查询想要的字段(当然查询的字段是要被GraphQL服务正确实现的)以及做一些定义好的mutation。
Schema 和类型
GraphQL规范定义了一些类型系统,包括两个特殊的类型Query和Mutation、自定义对象类型、标量类型、枚举类型、接口、联合类型、输入类型。其中只有在Query和Mutation这两个类型中定义的字段才能分别作为客户端查询和变更操作里可用的字段。
Query类型
一个查询类型可以如下定义:
type Query {
hero(episode: Episode): Character
droid(id: ID!): Droid
}
字段后面的括号里是查询字段需要的参数,参数冒号后面是参数的类型,字段后面的冒号接字段的类型
Mutation类型
- 一个变更类型可以如下定义:
type Mutation {
updateHero(where: inputType): Character
}
和查询类型定义一样,变更类型定义了作为变更的字段(需要的参数)以及每个变更字段返回的类型
标量类型(Scalar Types)
GraphQL 自带一组默认标量类型:
Int:有符号 32 位整数。
Float:有符号双精度浮点值。
String:UTF‐8 字符序列。
Boolean:true 或者 false。
ID:ID 标量类型表示一个唯一标识符,通常用以重新获取对象或者作为缓存中的键。ID 类型使用和 String 一样的方式序列化;然而将其定义为 ID 意味着并不需要人类可读型。
接口(Interfaces)
一个接口是一个抽象类型,它包含某些字段,而对象类型必须包含这些字段,才能算实现了这个接口。例如:
interface Character {
id: ID!
name: String!
friends: [Character]
appearsIn: [Episode]!
}
联合类型(Union Types)
联合类型的成员需要是具体对象类型,逻辑或的关系,表示可能是其中某一种类型:
union SearchResult = Human | Droid | Starship
可以使用条件片段来查询任意字段
枚举类型(Enumeration Types)
也称作枚举(enum),枚举类型是一种特殊的标量,它限制在一个特殊的可选值集合内。例如:
enum Episode {
NEWHOPE
EMPIRE
JEDI
}
查询(query)
GraphQL一个强大的特性就是可以在客户端一次查询任何需要的信息, 而不必对每个特定资源增加特定的端点。做到了接口只有想要的数据,没有冗余数据。
一个完整的GraphQL查询定义如下:
query searchUesr($verb: type){
user {
name(name: $verb)
age
}
}
当要定义变量时,需要完整的写出操作关键词(这里是query)和操作名称(searchUesr),后面接变量的定义。在具体的GraphQL服务实现,一般上面的查询字符串作为字段query的值,变量定义在variables字段中。当没有变量的定义时,可以简写查询:
{
user {
name(name: $verb)
age
}
}
也就是省略操作关键字和操作名称。
变更(mutation)
和上面的查询一样,只是关键字变成了mutation,例如:
mutation AddUser($name: String!) {
createUser(data: { name: $name }) {
name
id
}
}
最后
以上就是冷傲板凳为你收集整理的GraphQL规范-API查询语言的全部内容,希望文章能够帮你解决GraphQL规范-API查询语言所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复