0%

如何使用GraphQL-进阶教程:工具和生态

接上篇 —— 如何使用 GraphQL-基础教程:更多概念 —— 继续翻译How to GraphQL 系列教程

了解 GraphQL 生态及其强大的工具,例如 GraphiQL、Playground 或 内省自行生成的文档。

基础和进阶系列翻译已完成:

  1. 介绍
  2. GraphQL 比 REST 的优点
  3. 核心概念
  4. 架构
  5. 客户端
  6. 服务端
  7. 更多概念
  8. 工具和生态
  9. 安全
  10. 常见问题

你可能已经意识到,GraphQL 生态现在正以惊人的速度增长。发生这种情况的原因之一是 GraphQL 使我们真正容易地开发出优秀的工具。在本节中,将了解容易的原因以及在生态中已经拥有的一些出色工具。

如果熟悉 GraphQL 基础知识,则可能知道 GraphQL 的类型系统如何使我们快速定义 API 的结构。使开发人员可以清楚地定义 API 的功能,还可以根据 schema 校验传入的查询。

GraphQL 令人惊奇的是这些功能不仅是服务端已知的。GraphQL 允许客户端向服务端询问有关其 schema 的信息。GraphQL 称为 内省(introspection)

内省

schema 的设计人员已经知道 schema 的结构,但是客户端如何才能查看可通过 GraphQL API 访问的内容?可以通过查询__schema 元字段来向 GraphQL 查询此信息,根据规范,该字段始终在查询的根类型上可用。

1
2
3
4
5
6
7
query {
__schema {
types {
name
}
}
}

以下面 schema 定义为例:

1
2
3
4
5
6
7
8
9
10
11
type Query {
author(id: ID!): Author
}

type Author {
posts: [Post!]!
}

type Post {
title: String!
}

如果要发送上述内省查询,则会得到以下结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
{
"data": {
"__schema": {
"types": [
{
"name": "Query"
},
{
"name": "Author"
},
{
"name": "Post"
},
{
"name": "ID"
},
{
"name": "String"
},
{
"name": "__Schema"
},
{
"name": "__Type"
},
{
"name": "__TypeKind"
},
{
"name": "__Field"
},
{
"name": "__InputValue"
},
{
"name": "__EnumValue"
},
{
"name": "__Directive"
},
{
"name": "__DirectiveLocation"
}
]
}
}
}

如你所见,查询了 schema 上的所有类型。同时获得了定义的对象类型和标量类型。甚至可以内省内省类型!

可获得的内省类型名称远不止于此。下面是另一个例子:

1
2
3
4
5
6
{
__type(name: "Author") {
name
description
}
}

在此示例中,使用 __type 元字段查询单个类型,并要求其名称和描述。下面是此查询的结果:

1
2
3
4
5
6
7
8
{
"data": {
"__type": {
"name": "Author",
"description": "The author of a post."
}
}
}

如你所见,内省是 GraphQL 的一项极其强大的功能,而我们只是马马虎虎的试了下。规范中对内省模式中可用的字段和类型进行了更详细的介绍。

GraphQL 生态中的许多工具都使用内省系统来提供惊人的功能。比如文档浏览器,自动完成,代码生成,一切皆有可能!构建和使用 GraphQL API 时,需要的最有用的工具之一会大量使用内省,这个工具是 GraphiQL.。

GraphQL Playground

GraphQL Playground是一个功能强大的 “GraphQL 编辑器”,用于与 GraphQL API 交互工作。它是一个可用于 GraphQL 查询,变更和订阅的编辑器,并具有自动完成和校验功能,以及用于快速可视化 schema 的结构(由内省支持)文档浏览器。它还可以显示查询历史记录,或者同时使用多个 GraphQL API。它还与graphql-config无缝集成。

这是一个非常强大的开发工具。例如,允许您在 GraphQL 服务器上调试和尝试查询,而不必在 curl 上编写普通的 GraphQL 查询。


前端记事本,不定期更新,欢迎关注!


👆 全文结束,棒槌时间到 👇