API 选择哪个接口?RESTful、GraphQL、gRPC、WebSocket、Webhook
人民网>>社会·法治

API 选择哪个接口?RESTful、GraphQL、gRPC、WebSocket、Webhook

2025-06-24 11:50:52 | 来源:人民网
小字号

大家好,我是比特桃。目前,我们的生活紧紧围绕着大量的互联网服务,每天互联网上都有数百亿次API调用。API 这是两个设备相互通信的一种方式,每次人们在手机上指尖快乐,背后都是 API 调用接口。
在这里插入图片描述
本文将列出一些常见的内容 API 接口,并阐述它们之间的优缺点和关系。

目录。

  • 一、API 类型。
    • 1.1 SOAP。
    • 1.2 RESTful。
    • 1.3 gRPC。
    • 1.4 GraphQL。
    • 1.5 WebSocket。
    • 1.6 Webhook。
  • 二、RESTful 详解。
  • 三、GraphQL 详解。
  • 四、gRPC 详解。
  • 五、API 优化。
  • 六、总结。

一、API 类型。

常用的 API 有很多类型的,但这篇文章的重点是 HTTP 之上的 API 接口(通用性)xff0;。像 TCP 传输层上方的其他应用层协议,如 MQTT 等,不在本文的讨论范围内。
在这里插入图片描述

1.1 SOAP。

SOAP 基于XML࿰的协议c;金融服务和支付网关࿰应用于安全性和可靠性至关重要c;更适合数据安全等级较高的场景。
在这里插入图片描述

1.2 RESTful。

基于JSON的轻量级 web 服务,也是目前应用最广泛的一种。 API 协议。
在这里插入图片描述

1.3 gRPC。

#xff0高性能微服务通信协议c;它是微服务架构的最爱。
在这里插入图片描述

1.4 GraphQL。

客户端可动态定制 API 协议,它不仅仅是API通信方式,还是一种查询语言。
在这里插入图片描述

1.5 WebSocket。

WebSocket 是实时通信的常用手段,基于HTTP协议。关于实时、双向和持久的连接。如果只需要服务器实时推送󿀌也可以尝试同样的基础 HTTP 的 SSE(Server-sent events)。
在这里插入图片描述

1.6 Webhook。

自定义远程回调函数,通常用于自动化处理。我们使用自动化部署 Jenkins ࿱有用a;Jenkins+Gitlab+前后端部署Docker。
在这里插入图片描述
下面我们将详细介绍三个最常用的三个 API 接口:RESTful、GraphQL、gRPC。

二、RESTful 详解。

RESTful API广泛应用于移动互联网时代,因为它有足够的轻量(基于JSON),非常灵活。
在这里插入图片描述
REST API规定了许多标准,例如:统一接口、通信方式、无状态、缓存等。遵循 REST API 标准的 API 称为 Restful API,为了保障 API 接口的可维护性,一般开头会有 v1/v2/v3 这个类似的版本号。
在这里插入图片描述
需要注意的是,,URL资源按名词命名,而不是动词,例如,您可以命名:

https://example.com/api/v3/products。

而不是:

https://example.com/api/v3/getALLproducts。

这也是很多不规范的“RESTful API“最容易犯错的地方,REST API 规定,动作是用 URI 进行的。
在这里插入图片描述
HTTP请求头类型对应的动作如下表所示c;也是我们常说的:CRUD #xfff1a;

类型。动作。
POST。CREATE。
GET。READ。
PUT。UPDATE。
DELETE。DELETE。

HTTP 常见返回码对应的含义如下表所示:

数值。结果。
200。成功。
400。请求错误。
500。后台错误。

另外,还要注意 API 接口的幂等性问题。只有在进行 POST 创建操作时,没有力等性,我们应该注意客户端的多个请求,数据重复问题。

三、GraphQL 详解。

Meta 公司开发的接口协议,目前 Github、Shopify、Ins 等等都在使用。最大的特点是灵活性和效率,对其产品有复杂数据要求的,提供了一个很好的选择。GraphQL 我们刚才说的 RESTful API 有许多相似之处,例如,它们都是基于http的、均通过 URL 统一资源定位,采用数据传输 JSON 格式。但GraphQL ࿰的独特优势在于c;客户端可定制选择界面返回的内容,这大大提高了程序的动态扩展能力。
在这里插入图片描述
如果一个动作需要多个数据的组合,那在 RESTful API 中,可能会面临多个请求。但在GraphQL中,可以在请求头中定制数据,GraphQL 返回组织好的数据。
在这里插入图片描述
但也有一定的缺陷󿀌一方面,缓存并不容易。GraphQL有单个入口点,默认使用 HTTP POST,会妨碍 HTTP 充分利用缓存。另一方面,数据࿰可以随意定制c;这可能会造成一些危险。

四、gRPC 详解。

RPC 每个人都应该不陌生󿀌Remote Procedure Call 远程调用过程。也就是说,两台服务器A󿀌B,A服务器上部署了一个应用程序,希望调用B服务器应用程序提供的方法。因为不在内存空间,不能直接调用󿀌调用的语义和数据需要通过网络来表达。

gRPC 是Google 开源远程过程调用框架࿰于2016年创建c;它重写了他们过年的内部RPC基础设施,并开源了。gRPC 是 RPC 一种流行的实现,已经采用了许多组织 gPRC 作为首选的 RPC 实现方案。Openfeign、也可以作为Dubbo的框架 RPC 实现方案。
GRPC生态系统的核心是使用 Protocal Buffers (协议缓冲区)作为其数据交换格式。它是一种与语言和平台无关的机制,用于编码结构化数据。
在这里插入图片描述
gRPC 使用 Protocal Buffers 通过线路对数据进行编码和发送。虽然GRPC也可以通过 JSON,但是Protocal Buffers 提供各种优势,使其成为 gRPC 编码格式的首选。通过定义通信协议 proto 文件,让微服务之间的通信,写好 proto 不同语言的实现可以通过工具自动生成:
在这里插入图片描述
之所以 gRPC 性能超高,Protocol Buffers 通信方案是重点。它是一种非常高效的二进制编码格式,比 JSON 快得多。
在这里插入图片描述
另一个高效的原因是,gRPC HTTP/2构建 以上,提供大规模的高性能基础。使用GRPC HTTP/2 Stream,它允许多个消息流通过单个长期TCP连接发送。HTTP/2 其优点是:多路复用、流量优先、二进制协议、服务推送。当然,Openfeign也可以通过配置使用 HTTP/2。
在这里插入图片描述
由于二进制编码和网络优化࿰,GRPCc;高效率󿀌比JSON快5倍。下图为 gRPC 通信过程:
在这里插入图片描述
说了这么多 gRPC 好处,那为什么服务器在与客户端沟通时没有使用它呢? gRPC 协议?这是因为GRPC依赖于HTTP/2的低级访问,目前没有浏览器支持 gRPC 控制客户端所需的网络请求级别。
但是,浏览器可以在代理的帮助下进行 gRPC 调用。这种技术被称为 gRPC-Web。但是这个功能集不能与之相匹配 gRPC 完全兼容。但在移动终端上实际上使用了,在电力和带宽有限的环境中具有重要意义。
在这里插入图片描述

五、API 优化。

  • 使用缓存󿀌类似的可以使用 Redis 这个工具󿀌缓存数据以提供高效的通信。
  • 连接池,使用多路复用技术󿀌减少对数据库的访问。
  • 避免 N+1 查询,当一个接口需要多个接口时 SQL 句子时,尝试组合使用一个。
  • 使用分页󿀌降低数据通信成本,换取更快的加载速度。
  • 采用 JSON,轻量级的 JSON 通信可以在服务端与客户端保持平衡。
  • 压缩,可以用 Brotli 算法压缩数据#xff0c;很多CDN༈内容分发网络)它还可以支持压缩。
  • 异步日志记录,当高并发时,这种工作可以分发给其他微服务。

六、总结。

我们了解了这篇文章的基础 HTTP ࿰在应用层协议上c;常用六种 API 接口:RESTful、GraphQL、gRPC、WebSocket、Webhook。每一个都有自己独特的特点和应用场景,我们应该根据产品和团队的具体情况来选择使用。没有最好的 API 接口,只有最合适的场景和应用。

(责编:人民网)

分享让更多人看到