认识 GraphQL
前段时间,GraphQL 出现并掀起了一阵热潮。但是 GraphQL 跟 REST 是两种不同的东西(前面我们写过 GraphQL 和 REST 对比),所以也需要一定的学习成本,导致大部分人都没有选择去学习它,今天就带大家简单过一遍 GraphQL 吧,希望大家能有所收获。

GraphQL 好在哪?
首先来说说 GraphQL 到底好在哪:
- GraphQL 速度快并且稳定
- GraphQL 可以获取更多的资源
- GraphQL 是单端点查询
- GraphQL 的可持续性非常出色
- GraphQL 具有向下兼容的特性
GraphQL 使用场景
GraphQL 的按需查询非常实用,试想一下,你们在开发一个非常大型的网站的时候,一个首页就得请求很多个接口了,比如:
- 轮播图接口
- Tag 接口
- List 接口
在上面的例子里,一个首页就得请求三个以上的接口了,浏览器并发数太多的话,会大大影响用户的使用体验。
那如果使用 GraphQL 去查询呢,就只需要一个接口就完事了,也就是一个请求就可以查询很多个请求所需要的数据,那自然减少了并发数。
query {
{
id
name
price
description
}
list {
id
totalAmount
status
user {
id
name
email
}
}
tag(id: "123") {
id
name
email
carousel {
id
totalAmount
status
}
}
}
GraphQL 教程
GraphQL 其实不难,无非就是传个不同的 query语句 到后端,接收不同的 JSON 罢了。
query 查询
比如我现在要设计一个学生管理平台,我想查询学生列表,我应该传什么参数呢?
query getStudents{
students {
id,name,age
}
}
分析一下上面的语句:
- query:操作类型
- getStudents:操作函数名
- students:是后端定义好的接口
- id,name,age:指的是我们需要查询的字段
这样查询,返回的数据为:
{
"data": {
"students": [
{
"id": "1",
"name": "tom",
"age": 15
},
{
"id": "2",
"name": "jane",
"age": 16
}
]
}
}
观察上面的数据,使我们想要的数据,并且只返回我们需要查询的字段。
传参查询
我们刚刚说了 getStudents 是 函数名,那既然是函数,肯定是可以传参的,比如,我们只需要查询 id 为 1 的学生,我们可以这么传:
query
query getStudent($id: ID!){
student(id: $id) {
id,name,age
}
}
variables
{
"id": "1"
}
这样就能查到我们想要的数据了。
mutation 修改
前面讲的是 query 语句,我们试一下 mutation 语句,他可以对数据进行修改、新增。
比如我们想要新增一个学生,我们可以这么写:
mutation addStudent($name: String!,$age: String!) {
addStudent(name: $name,age: $age) {
id,name,age
}
}
Apifox 调试 GraphQL 接口
我们写完 GraphQL 接口之后,我们需要使用 API 工具对 GraphQL 接口进行调试,今天我使用 Apifox 这款非常好用的工具,进行调试。
新建 GraphQL 请求
我们需要先在 Apifox 里新建一个 GraphQL 请求,使用它去发起请求,并调试。

然后点击 保存 按钮,完成创建。
查询
我们先查出所有的学生,我们需要跳到 运行 页面,并选择对应的 Body 类型,填写 query 语句,然后点击 发送 按钮,得到查询结果,符合我们的预期。

带参查询
接着我们可以进行 带参查询,需要同时配置:
- query
- variables

关于Apifox
Apifox 是一体化 API 协作平台,可以实现 API 文档、API 调试、API Mock、 API 自动化测试,是更先进的 API 设计/开发/测试工具。Apifox 提供了一种全面的 API 管理解决方案。使用 Apifox ,你可以在统一的平台上设计、调试、测试以及协作你的 API,消除了在不同工具之间切换和数据不一致的问题。 简化了你的 API 工作流,并确保了前端、后端和测试人员之间的高效协作。

欢迎体验一下,完全免费的哦:在线使用 Apifox