GraphQL vs gRPC:哪个更适合你的 API?

本文比较了 GraphQL 和 gRPC 这两个流行的 API 工具,讨论了它们的优缺点和适用场景,以帮助你选择最适合你的 API 工具。

用 Apifox,节省研发团队的每一分钟

GraphQL vs gRPC:哪个更适合你的 API?

免费使用 Apifox

相关推荐

最新文章

API

一体化协作平台

API 设计

API 文档

API 调试

自动化测试

API Mock

API Hub

立即体验 Apifox
目录

什么 GraphQL?

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

gRPC 是一个由谷歌开发的现代开源高性能远程过程调用(RPC)框架,可以在多种开发环境中运行。它于 2015 年发布,是一个基于 HTTP/2 设计的高性能、开源、通用的 RPC 框架。

所以 gRPC 自然涵盖了 HTTP/2 的优点:

  • 数据传输二进制分帧
  • 多路复用
  • 服务端推送
  • 头部压缩

是怎么传输的?

gRPC 传输模型
gRPC 传输模型

从上图的 gRPC 传输模型可以看出,客户端 Stub 从 gRPC Core 库发起请求,序列化成 Protobuf 消息格式,然后传输至服务端。

服务端 Stub 接收客户端请求,处理请求中的 Protobuf 数据并进行反序列化,然后将请求对象传入服务器并实现业务逻辑处理。最终再将响应序列化后返回给客户端,从而形成一次完整的接口调用过程。

使用 Apifox 发送 GraphQL

在 Apifox 创建 HTTP 项目。

使用 Apifox 发送 GraphQL
创建 HTTP

在接口地址中输入 GraphQL 的服务地址,然后发起请求。

使用 Apifox 发送 GraphQL
发起请求

使用 Apifox 发送 gRPC 接口

Apifox 支持基于 .proto 文件的 gRPC 调试,包括一元调用和流式调用。在创建项目时「选择 gRPC 项目」-->「导入 .proto 文件」,无需写代码即可直接调用 gRPC 接口。

使用 Apifox 发送 gRPC 接口
创建 gRPC

在调试 gRPC 接口之前,也需要先导入作为 API 定义的 .proto 文件。如果一个 .proto 文件依赖于其他 .proto 文件,那么需要手动添加依赖关系目录。

使用 Apifox 发送 gRPC 接口
添加 .proto

一元调用

只需要在地址栏填写 URL 后点击「调用」按钮,即可发起一元调用。

使用 Apifox 发送 gRPC 接口
一元调用

流式调用

流式调用包含服务端流、客户端流、双向流

在发起调用之后,你可以在 Message 标签下撰写消息并发送。Apifox 提供了一个时间线视图,按照时间顺序集中展示调用状态、发送的消息、收到的消息。点击消息之后,可以非常方便地查看消息的详情。

使用 Apifox 发送 gRPC 接口
流式调用

关于Apifox

官网:https://apifox.com/

Apifox
Apifox 官网
  • 集成了API 文档、API 调试、API Mock、API 自动化测试 API 一体化协作平台
  • 拥有更先进的 API 设计/开发/测试工具
  • Apifox = Postman + Swagger + Mock + JMeter

知识扩展: