多路复用是 http/2 的一个非常酷的功能。它允许使用一个连接同时处理来自单个客户端的多个请求。
我的问题是:此多路复用功能是否违反 REST API 规则?
- 我了解 REST API 强制执行请求-响应架构,但在未启用服务器推送(流式传输)功能的情况下进行多路复用本质上是一个请求 -> 一个响应范例,因此这并不违规,对吗?
- REST API 还强制执行无状态,但我迷失了方向:通过单个连接进行多路复用被视为有状态还是无状态?
如果我想将当前使用 HTTP/1.1 实现的 REST API 升级为使用 HTTP/2,我是否有权使用多路复用功能,或者我必须逐个流(req1、res1、req2) ,res2...)?
最佳答案
网络多路复用和 REST API 是两个完全不同的事务/责任层。
多路复用是关于通信信号如何流动的,而不是关于 HTTP 消息通信的架构模式是什么(这就是 REST 的全部内容)。
从 REST 角度来看,这并不重要:
- 电信号如何在有线或无线中流动;
- 您使用什么类型的电缆或其他物理装置来传输数据;
- 即使您在多个请求-响应周期中维护单个物理 (TCP) 连接,或者在每个 HTTP 请求-响应中打开和关闭 TCP 连接;
- 即使你使用 TCP 之外的其他协议(protocol)(是的,这不是一个好主意,但从理论上讲,只要保证通信具有完整性、一致性和稳定性(这是 TCP 带来的全部),那也没有多大关系物理连接是如何建立的)。
因为,
REST 是一种用于实现 Web 应用程序的架构(Web 应用程序的设计)模式。
多路复用是关于如何实现物理信号/连接的。
只要 HTTP 消息在客户端和服务器之间无缝流动,物理层或传输层就与 REST 端点无关;因此,多路复用中没有任何内容可以违反 REST 中的任何内容,再次强调:这两者服务于完全不同的目的。
关于rest - HTTP/2 多路复用是否违反 REST API 规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70489531/