什么 GraphQL?
是什么
GraphQL 是一种针对 Graph(图状数据)查询工作特别有优势的 Query Language(查询语言),所以叫做 GraphQL。它跟 SQL 的关系是共用 QL 后缀,就好像「汉语」和「英语」共用后缀一样,但他们本质上是不同的语言。
GraphQL 跟用作存储的 NoSQL 没有必然联系,虽然 GraphQL 背后的实际存储可以选择 NoSQL 类型的数据库,但也可以用 SQL 类型的数据库,或者任意其它存储方式(例如文本文件、存内存里等等)。
GraphQL 的优缺点
优点
- GraphQL 速度快且稳定
- GraphQL 可以获取更多的资源
- GraphQL 是单端点查询
- GraphQL 的可持续性非常出色
- GraphQL 具有向下兼容的特性
- GraphQL 具有强类型
- GraphQL 支持使用者去决定服务器支持的类型
缺点
- GraphQL 无法完成深度查询
- GraphQL 具有非常死板的响应结构
- GraphQL 无法进行网络级别的缓存
- GraphQL 默认没有上传文件的功能
- GraphQL 的执行是不可预测的
在同样一个接口场景下,GraphQL 会表现得很复杂,所以建议简单的 API 直接使用 RSET API.
什么是 gRPC?
gRPC 是一个由谷歌开发的现代开源高性能远程过程调用(RPC)框架,可以在多种开发环境中运行。它于 2015 年发布,是一个基于 HTTP/2 设计的高性能、开源、通用的 RPC 框架。
所以 gRPC 自然涵盖了 HTTP/2 的优点:
- 数据传输二进制分帧
- 多路复用
- 服务端推送
- 头部压缩
是怎么传输的?
从上图的 gRPC 传输模型可以看出,客户端 Stub 从 gRPC Core 库发起请求,序列化成 Protobuf 消息格式,然后传输至服务端。
服务端 Stub 接收客户端请求,处理请求中的 Protobuf 数据并进行反序列化,然后将请求对象传入服务器并实现业务逻辑处理。最终再将响应序列化后返回给客户端,从而形成一次完整的接口调用过程。
使用 Apifox 发送 GraphQL
在 Apifox 创建 HTTP 项目。
在接口地址中输入 GraphQL 的服务地址,然后发起请求。
使用 Apifox 发送 gRPC 接口
Apifox 支持基于 .proto 文件的 gRPC 调试,包括一元调用和流式调用。在创建项目时「选择 gRPC 项目」-->「导入 .proto 文件」,无需写代码即可直接调用 gRPC 接口。
在调试 gRPC 接口之前,也需要先导入作为 API 定义的 .proto 文件。如果一个 .proto 文件依赖于其他 .proto 文件,那么需要手动添加依赖关系目录。
一元调用
只需要在地址栏填写 URL 后点击「调用」按钮,即可发起一元调用。
流式调用
流式调用包含服务端流、客户端流、双向流。
在发起调用之后,你可以在 Message 标签下撰写消息并发送。Apifox 提供了一个时间线视图,按照时间顺序集中展示调用状态、发送的消息、收到的消息。点击消息之后,可以非常方便地查看消息的详情。
关于Apifox
- 集成了API 文档、API 调试、API Mock、API 自动化测试 API 一体化协作平台
- 拥有更先进的 API 设计/开发/测试工具
- Apifox = Postman + Swagger + Mock + JMeter
知识扩展: