GraphQL 是什么
GraphQL 究竟是什么?简单来说,它是一套专为 API 设计的查询语言,同时也充当着运行在服务端的引擎。它提供了一整套规范——服务端能够精准地返回客户端所需的数据,不多不少。本质上,GraphQL 是为前后端数据查询量身打造的语言:开发者可以自由定义数据模型、查询规则与参数,通过单一请求即可获取全部所需数据。这与传统的 RESTful 请求截然不同——后者往往需要多次调用才能拼凑出完整数据。因此,使用 GraphQL 时,开发者对返回结果拥有“确定性”。
GraphQL 规范
数据模型
所谓数据模型,就是定义“对象的结构以及对象之间的关联关系”。例如下图展示了一个完整的数据模型:它定义了一个查询 Query 以及两个返回对象 Header 和 Query,每个对象的字段和类型都清晰标注。这些定义最终都会应用于实际的 GraphQL 请求中。

字段
GraphQL 查询具有一个直观的特性:你请求哪些字段,服务端就返回哪些字段。下面的示例中,只请求了两个字段,结果也严格对应返回了这两个字段的数据。这种“预期一致性”正是 GraphQL 最让开发者感到顺手的地方。

参数
查询时还可以传递参数。如下图中,person 对象以 id 为参数进行数据筛选,在变量区域输入具体的 id 值即可完成查询。

运行示例
先看第一个例子:根据数据模型请求所有字段,返回完整的数据结果。

第二个例子:只输出选择的属性,服务端就仅返回了那几项数据。

优势和劣势
了解了基本概念与用法后,下面来聊聊 GraphQL 的优劣势。
优势
- 仅需一份数据源即可查询所有数据,所有请求都指向同一个服务端点。
- 返回结果与请求字段严格匹配,减少了前后端之间无效数据的干扰。
- 支持所有数据类型的定义与传输,包括请求中的参数传递。
- 生态丰富,目前已有大量开源工具、插件和扩展可供使用。
劣势
- 对于习惯了 RESTful 风格的开发者来说,上手 GraphQL 需要一定的学习成本。
- 相比 RESTful 接口,服务端开发者可能需要花费更多时间来设计和维护数据模型。
使用 Apifox 调试 GraphQL
打开 Apifox,新建一个 HTTP 项目,在其中新建一个 POST 请求,然后填写请求 URL,这个 URL 就是你的 GraphQL 服务器地址,例如https://localhost:3000/graphql,接着填写接口名称,在请求参数中依次选择【Body->GraphQL】后,保存即可。

保存之后,进入“运行”页面。在该页面中,输入你的 GraphQL 查询语句,并对 GraphQL 服务进行调试,例如:
query {author(id: "1") {idname}}

调试时也可以使用变量形式:Query:
query GetAuthor($authorId: ID!) {author(id: $authorId) {idname}}
Variables:
{"authorId": "2"}
总结
GraphQL 还拥有更多值得探索的功能与深层用途。感兴趣的话,不妨亲自动手尝试一番。

