为啥用 GraphQL
- GraphQL 可以获取更多的资源,当查询一个数据的时候,不止是这个数据,甚至可以很快地查询到数据引用的另一个数据。GraphQL 可以在单个请求中去获取尽量多的数据,并且在弱网状态下,GraphQL 依旧表现出色。
- GraphQL 是单端点查询,并在此端点中去完成所有的查询。
- GraphQL 的可持续性非常出色,无论是新字段、还是旧字段,它都能很好地去处理,可维护性也极佳。
- GraphQL 具有向下兼容的特性,就算是很久很久以前的功能,GraphQL 还是能很好地去兼容它,保证旧版本的正常运行,同时又不影响新功能的加入以及整体的稳定性。这样做的好处就是,不需要去担忧版本号问题了。
- GraphQL 具有强类型,在 GraphQL 的查询中,一个级别对应一个强类型,这个类型充当一个字段的描述。这样的好处就是,在查询之前,可以校验出错误并提示,方便定位问题,提高性能。
- 自省:可以查询 GraphQL 服务器支持的类型。这为工具和客户端软件创建了一个强大的平台,可以在这些信息的基础上构建静态类型语言的代码生成、我们的应用程序框架、Relay 或 GraphiQL 等 IDE。
- GraphQL 支持使用者去决定服务器支持的类型。这样的好处就是,给很多使用 GraphQL 的 工具或者端建立了一个比较成熟且强大的应用平台,通过这个平台,一些框架、工具得到不断地优化提升。
GraphQL 使用场景
- 比较复杂的数据查询和获取,因为 GraphQL 可以只获取你想要的数据,减少查询的数据量,提高查询速度;
- 需要从多个平台进行数据查询并集成,GraphQL 可以作为一个集成容器,集合所有数据;
- 前后端分离模式下,使用 GraphQL 比较灵活开发,减少沟通成本,提高开发效率;
- 实时查询推送,GraphQL 具备订阅机制,可以利用这个机制,来进行查询实时推送。
比如我们现在开发一个大型的电商项目,涉及到的接口有:
- /api/products
- /api/orders
- /api/users
如果使用 REST 去做需求的话,需要请求三个接口的数据。
但是如果使用 GraphQL 的话,只需要发一个请求即可,并且你可以选择自己想要查询的字段,这可以提高整体的查询性能。
query {
products {
id
name
price
description
}
orders {
id
totalAmount
status
user {
id
name
email
}
}
user(id: "123") {
id
name
email
orders {
id
totalAmount
status
}
}
}
使用 Apifox 请求 GraphQL 接口
那我们现在用一个小例子,来演示一下如何去请求一个 GraphQL 接口,我们使用的是一款非常出色的 API 工具 —— Apifox。
创建 GraphQL 接口
我们需要创建一个 GraphQL 来用于调试,填入 URL、Method、接口名称,然后点击 保存,即可创建一个接口
填写 query 和 variables
发送 GraphQL 请求,需要 query 和 variables,我们跳到 运行页,并填入相关参数
发送请求 获得响应
Apifox
- 集成了API 文档、API 调试、API Mock、API 自动化测试 API 一体化协作平台
- 拥有更先进的 API 设计/开发/测试工具
- Apifox = Postman + Swagger + Mock + JMeter
欢迎体验一下,完全免费的哦:在线使用 Apifox
知识扩展:
了解更多 GraphQL 相关使用技巧。