GraphQL Learn (1) - Queries and Mutations

Web

在此页面上,你将详细了解如何查询GrahQL服务器。

字段(Fields)

最简单的,GraphQL是关于要求对象上的特定字段。我们先来看一个非常简单的查询,当我们运行它时得到结果:

1
2
3
4
5
{
hero {
name
}
}
1
2
3
4
5
6
7
{
"data": {
"hero": {
"name": "R2-D2"
}
}
}

可以看到,查询与结果的形状完全相同。这对于GraphQL是至关重要的,因为您总是收到您期望的内容,并且服务器确切知道客户端要求哪些字段。

GraphQL Learn (3) - Validation

Web

通过使用类型系统,可以预先确定GraphQL查询是否有效。 这样可以让服务器和客户端有效地通知开发人员在创建无效查询时,无需在运行时检查。

对于我们的星球大战示例,文件starWarsValidation-test.js包含许多无效的查询,可以用来测试当前实现的验证器。

首先,我们来看一个复杂的有效查询。 这是一个嵌套查询,类似于上一节的一个示例,但将重复的字段分解成一个片段:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
hero {
...NameAndAppearances
friends {
...NameAndAppearances
friends {
...NameAndAppearances
}
}
}
}
fragment NameAndAppearances on Character {
name
appearsIn
}

GraphQL Learn (4) - Execution

Web

经过验证,GraphQL查询由GraphQL服务器执行,然后返回一个与查询形状相同的结果,通常为JSON。

GraphQL无法执行没有类型系统的查询,让我们使用类型系统例子来说明执行查询,这个例子是我们教程中使用的类型系统中的一部分:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
type Query {
human(id: ID!): Human
}
type Human {
name: String
appearsIn: [Episode]
starships: [Starship]
}
enum Episode {
NEWHOPE
EMPIRE
JEDI
}
type Starship {
name: String
}

GraphQL Learn (5) - Introspection

Web

查询GraphQL架构有关它支持的查询的信息通常很有用。 GraphQL允许我们使用内省系统来做到这一点!对于我们的星球大战例子来说,文件starWarsIntrospection-test.js包含许多查询内省系统的查询,并且是一个完整的按照规范实现的测试文件。

我们设计了类型系统,所以我们应该知道系统中可用的类型。但是如果不知道,我们还可以通过查询__schema字段来询问GraphQL。这个字段始终存在于根类型中。

GraphQL Learn (2) - Schemas and Types

Web

在此页面上,您将了解有关GraphQL类型系统的所有知识,以及如何描述可查询哪些数据。 由于GraphQL可以与任何后端框架或编程语言一起使用,因此我们将远离实现特定的详细信息,仅讨论概念。

类型系统(Type System)

如果您以前看过GraphQL查询,那么你应该知道GraphQL查询语言基本上是在对象上选择字段。 所以在以下查询中:

1
2
3
4
5
6
{
hero {
name
appearsIn
}
}
1
2
3
4
5
6
7
8
9
10
11
12
{
"data": {
"hero": {
"name": "R2-D2",
"appearsIn": [
"NEWHOPE",
"EMPIRE",
"JEDI"
]
}
}
}