GraphQL-Cheatsheet
文章目录

Basic

Comments

反正这边就是放一个井号就可以

1
2
3
4
5
6
7
# A type that describes the user
type User {
# The user's username, should be typed in the login field.
username: String!
# The user's password.
password: String!
}

Schemas & Types

Union Types

说明对应的类型可以是以下的 任何一种

1
union SearchResult = Human | Droid | Starship

对于 Union Types 进行 Query 的时候需要使用 Inline Fragments:

1
2
3
4
5
6
7
8
9
10
11
12
13
query HeroForEpisode($ep: Episode!) {       # 这个地方是根据传进来的 Episode 来决定返回什么类型, 类型的 `Type` 就是 `SearchResult`
hero(episode: $ep) {
name
__typename # 另外这个 attr 是可选的, 会根据返回的 Type 来显示
# 如果返回的一个 Human,那么这个值就是 "Human"
... on Droid { # 这个地方左边是真的要写三个点... 而不是省略了某部分
primaryFunction
}
... on Human {
height
}
}
}

Fragments

很好理解这个就是一个碎片的概念, 将一些东西分片之后随后,随后重新组合将会变得更简单

存在的一些限制这个碎片必须要是已经存在的 Type 的部分 fields

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
leftComparison: hero(episode: EMPIRE) {
...comparisonFields
}
rightComparison: hero(episode: JEDI) {
...comparisonFields
}
}

fragment comparisonFields on Character {
name
appearsIn
friends {
name
}
}

还可以在 fragment 里面提供对应一些参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
query HeroComparison($first: Int = 3) {
leftComparison: hero(episode: EMPIRE) {
...comparisonFields
}
rightComparison: hero(episode: JEDI) {
...comparisonFields
}
}

fragment comparisonFields on Character {
name
friendsConnection(first: $first) { # 上面传进来的参数放到了这里
totalCount
edges {
node {
name
}
}
}
}

Troubleshooting

Syntax Error: Expected Name, found )

这个东西其实就是里面某个地方的 query 写错了, 很可能是 schem 里面格式错误

比如下方不需要写括号的

1
2
3
type Query {
getContact(): Contact
}

Resource

  • GraphQL Faker
    • 这看起来是一个快速生成测试数据并且调试 GraphQL 的一个工具, 里面可以使用特定关键字生成一段测试数据