【问题标题】:Does HTTP/2 multiplexing violate REST API rules?HTTP/2 多路复用是否违反 REST API 规则?
【发布时间】:2022-01-26 01:36:56
【问题描述】:

多路复用是 http/2 的一个非常酷的特性。它允许使用一个连接同时处理来自单个客户端的多个请求。

我的问题是:这个多路复用功能是否违反了 REST API 规则?

  1. 我了解 REST API 强制执行请求-响应架构,但未启用服务器推送(流式传输)功能的多路复用本质上是一个请求 -> 一个响应范例,所以这不是违规,对吗?
  2. REST API 也强制执行无状态,我迷路了:通过单个连接进行多路复用被视为有状态还是无状态?

如果我想升级当前使用 HTTP/1.1 实现的 REST API 以使用 HTTP/2,我是否有权使用多路复用功能,或者我必须在流之后进行流(req1、res1、req2 , res2...)?

【问题讨论】:

  • 只要每个 REST 端点调用在逻辑上仍然表现为请求-响应并且从 REST 角度来看是无状态的,传输协议的细节就无关紧要。

标签: rest http protocols http2


【解决方案1】:

网络多路复用和 REST API 是两个完全不同的事务/责任层。

多路复用是关于通信信号如何流动,而不是关于 HTTP 消息通信的架构模式是什么(这就是 REST 的全部内容)。

从 REST 的角度来看,它很重要:

  1. 电信号如何在电缆或无线中流动;
  2. 您使用什么类型的电缆或其他物理方式传输数据;
  3. 即使您在多个请求-响应周期中维护单个物理 (TCP) 连接,或者您在每个 HTTP 请求-响应中打开和关闭 TCP 连接;
  4. 即使你使用 TCP 以外的其他东西(是的,这不是一个好主意,但从理论上讲,只要确保通信具有完整性、一致性和稳定性(这都是 TCP 所带来的),也没关系如何建立物理连接)。

因为,

REST 是一种用于实现 Web 应用程序的架构(Web 应用程序设计)模式。

多路复用是关于如何实现物理信号/连接。

只要 HTTP 消息在客户端和服务器之间无缝流动,物理层或传输层就与 REST 端点无关;因此,在多路复用中没有什么可以违反 REST 中的任何内容,因为 - 再次说明:这两者的用途完全不同。

【讨论】:

  • 您好 Giorgi,感谢您的回复。我确实了解 REST 和多路复用是两个不同的层,但我的问题是:HTTP/2 多路复用违反 REST 规则?更具体地说,(req1, req2, res1, res2) 模式是否仍被视为由 REST 强制执行的一个请求一个响应范例?通过一个通道进行多路复用仍然是无状态的吗?
  • @souverlai 查看更新后的答案。
  • 有道理。谢谢乔治!
猜你喜欢
  • 2022-07-22
  • 2019-05-04
  • 1970-01-01
  • 2013-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-03
  • 2020-04-11
  • 1970-01-01
相关资源
最近更新 更多