GraphQL 是 Facebook 开发的一种数据查询语言,旨在为移动和 Web 应用程序前端提供服务。最近几年,GraphQL 应用趋势增长明显,如 GitHub 几年前已经仅对开发者提供 GraphQL API。相比较 Restful API,GraphQL 优势明显:
- GraphQL API 有强类型 schema;
- 按需获取;
- GraphQL支持快速产品开发;
- 自由组合的 GraphQL API;
- 丰富的开源生态和非常活跃的社区
Rust 程序设计语言中,对于 GraphQL 的支持非常活跃,并且均支持异步 async/await。目前,Rust 生态中,存在两个用Rust语言实现的GraphQL服务端库:async-graphql 和 juniper。
async-graphql 较为新生,基于较新的 async-std 异步库开发;而 juniper 较为成熟,基于更为成熟的 tokio 异步库开发。两者均完全兼容GraphQL规范以及绝大部分的扩展功能,类型安全并且高性能。
在 async-graphql 团队的 benchmark 仓库中,提供了两者性能简单比较的示例。经测试,两者性能差别较为明显。
测试数据如下(请注意,测试数据仅供参考,并不能全面反映实际生产环境的压力基准)——
代码语言:javascript复制# 第 1 次
juniper: 46216 ms
async-graphql: 27354 ms
# 第 2 次
juniper: 45990 ms
async-graphql: 26272 ms
# 第 3 次
juniper: 47518 ms
async-graphql: 28352 ms
# 第 4 次
juniper: 116272 ms
async-graphql: 72569 ms
# 第 5 次
juniper: 114950 ms
async-graphql: 67003 ms
# 第 6 次
juniper: 106416 ms
async-graphql: 61086 ms
如需要进一步了解学习,请访问各自教程。
juniper—— https://juniper.budshome.com
async-std—— https://async-graphql.budshome.com