带正文的 GET 请求 VS POST 检索大型资源

Far*_*raz 6 rest http

根据许多像这样的帖子,带有正文的 GET 请求并不常见。

另一方面,REST 中的最佳实践之一是仅当我们想要对资源进行更改时使用 POST,而当我们只想检索资源时使用 GET。

所以我的问题是获取具有非常大有效负载的资源的首选方式是什么?即使我实际上没有更改任何内容,我是否应该优先考虑 HTTP 最佳实践并将 POST 与正文一起使用,或者坚持 RESTFUL 实践并将 GET 与正文一起使用?

Voi*_*son 7

在这种情况下,“HTTP 最佳实践”和“RESTFUL 实践”是相同的:在请求正文中使用 GET 方法令牌是不好的做法。


仅当我们想要对资源进行更改时才使用 POST

这不太正确- 请注意使用 POST 是可以的(Fielding,2009)。粗略总结一下,POST 是约束最少的 HTTP 方法。我们总是可以使用它,但当请求的语义符合约束时,我们应该更喜欢使用更具体的方法。

为了获取资源的表示,我们更喜欢使用 GET,因为这样可以最好地将请求的语义传达给通用 HTTP 组件,以便它们可以正确解释请求的语义并执行有用的操作。

但这取决于能否使用请求行中的信息完全识别资源。如果您的标识符太长,那么这将不起作用,您需要转而使用 POST,将“标识符”复制到请求正文中。

这“有效”,但代价是通用组件不会知道 GET 约束仍然适用,因此无法执行任何智能操作(如果响应丢失,则自动重试,缓存结果) , 等等)。


2020 年底,HTTP-WG 通过了一项提案,为新方法令牌创建标准,该方法令牌将充当“带正文的 GET”。因此,在某个时候,我们应该开始看到注册的标准和一致的实现等等。