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

大家好,我是比特桃。目前,我们的生活紧紧围绕着大量的互联网服务,每天互联网上都有数百亿次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 远程调用过程。也就是说,两台服务器AB,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 接口,只有最合适的场景和应用。
分享让更多人看到
推荐阅读
热门排行
- 1如何在SQL中高效使用聚合函数、日期函数和字符串函数:实用技巧与案例解析
- 2人体工程学设计 皮肤触感!雷柏V20S手价69!
- 3如何在SQL中高效使用聚合函数、日期函数和字符串函数:实用技巧与案例解析
- 4天玑9300 手机售价暴跌至2769元
- 5曝光iPhone 19 Pro外观颠覆:像玻璃一样
- 6让AI为您回复微信-大语言模型的创意调用
- 7【大语言模型的漏洞与“越狱”】GPT、Llama等模型全部中招!
- 8构建部署mysql的docker,挂载指定目录
- 9安装Rediss安装docker:docker离线安装Rediss、Rediss安装docker在线安装、Redis镜像下载,Redis配置,Redis命令
- 10[ai笔记5] 个人AI信息助手实战实战