这份快速参考备忘单提供了 GraphQL 的简要概述
入门
概述
- RESTful API 的另一种方法
- GraphQL 是一种 API 查询语言
- 使用清晰的共享术语轻松描述 GraphQL API 的形状。
- 客户端发出查询/突变以读取和更新数据
- GraphQL 语法可以表达复杂的实体关系
- 用 不同语言 实现 GraphQL 的库
Schema
:- | - |
---|---|
schema |
GraphQL 架构定义 |
query |
读取和遍历数据 |
mutation |
修改数据或触发动作 |
subscription |
发生事件时运行查询 |
内置标量类型
:- | - |
---|---|
Int |
有符号 32 位整数 |
Float |
有符号双精度浮点值 |
String |
UTF-8 字符序列 |
Boolean |
对或错布尔值类型 |
ID |
唯一标识符 |
类型定义
:- | - |
---|---|
scalar |
标量类型 |
type |
对象类型 |
interface |
接口类型 |
union |
联合类型 |
enum |
枚举类型 |
input |
输入对象类型 |
类型修饰符
:- | - |
---|---|
String |
可空字符串 |
String! |
非空字符串 |
[String] |
可空字符串列表 |
[String]! |
可空字符串的非空列表 |
[String!]! |
非空字符串的非空列表 |
输入参数
基本输入
1 | type Query { |
输入默认值
1 | type Query { |
具有多个参数的输入
1 | type Query { |
具有多个参数和默认值的输入
1 | type Query { |
输入类型
1 | input ListUsersInput { |
1 | type Mutation { |
自定义标量
1 | scalar Url |
接口
1 | interface Foo { |
实现一个或多个接口的对象
联合
1 | type Foo { |
一个或多个对象的联合
枚举
1 | enum USER_STATE { |
查询和变更(Mutations)
字段
1 | { |
结果:
1 | { |
查询可以有注释
1 | { |
结果:
1 | { |
参数 Arguments
1 | { |
结果:
1 | { |
不同类型的参数
1 | { |
结果:
1 | { |
别名(Aliases)
1 | { |
结果:
1 | { |
片段(Fragments)
1 | { |
结果:
1 | { |
在片段内使用变量
1 | query HeroComparison($first: Int = 3) { |
结果:
1 | { |
操作名称(Operation name)
1 | query HeroNameAndFriends { |
结果:
1 | { |
变量(Variables)
1 | # { "graphiql": true, "variables": { "episode": JEDI } } |
变量前缀必须为 $
,后跟其类型
默认变量(Default variables)
1 | query HeroNameAndFriends($episode: Episode = "JEDI") { |
指令(Directives)
1 | query Hero($episode: Episode, $withFriends: Boolean!) { |
1 | { "episode": "JEDI", "withFriends": false } |
结果:
1 | { |
@include(if: Boolean)
仅在参数为true
时,包含此字段@skip(if: Boolean)
如果参数为true
,跳过此字段
变更(Mutations)
1 | mutation CreateReviewForEpisode($ep: Episode!, $review: ReviewInput!) { |
1 | { |
结果:
1 | { |
内联片段(Inline Fragments)
1 | query HeroForEpisode($ep: Episode!) { |
1 | { "ep": "JEDI" } |
结果:
1 | { |
元字段(Meta fields)
1 | { |
结果:
1 | { |
另见
- GraphQL Schema Language Cheat Sheet (github.com)
评论