请求带有有意义的 Body 的 RESTful GET?标准不明确

Rub*_*ton 7 rest http

当我们试图遵循标准时,我们发现自己陷入了死胡同,因为我们需要构建一个应该是 GET 并且应该具有有意义的正文的请求。

该请求只是想检索一些数据,数据库内部没有任何修改,只是获取一些数据。但同时我们需要为我们想要检索的对象发送一个 id 数组,而且不,这些对象无法以任何方式索引,因此我们确实需要发送 id 列表,或者发出 100 个请求服务器将它们一一获取。那不会发生。

我们还可以将列表添加到 URL,但如果 id 列表太大,我们无法确定 URL 不会太长。因此,为了确保系统不会失败,我们要使用 Body。

我读到 GET 可以有一个正文,但前提是它没有意义: HTTP GET with request body

是的。换句话说,任何 HTTP 请求消息都可以包含消息正文,因此必须考虑到这一点来解析消息。然而,GET 的服务器语义受到限制,因此主体(如果有)对请求没有语义意义。解析的要求与方法语义的要求是分开的。

所以,是的,您可以使用 GET 发送正文,但不,这样做永远没有用。

这是 HTTP/1.1 分层设计的一部分,一旦规范划分(正在进行中),该设计将再次变得清晰。

....罗伊

但我们的 Body 是有意义的,这让我们必须在不遵循 HTTP 标准或不遵循 REST 标准之间做出决定。

还有其他选择吗?(并不是这阻碍了我们,而是我想知道答案)。

非常感谢。

Ela*_*ubi 0


您应该考虑将请求更改为 POST 方法。

据我了解,带有请求正文的 GET 存在三个潜在问题:(链接到博客

  • 并非所有服务器都支持此功能。
  • 并非所有工具都支持此功能(Swagger、POSTMAN 今年添加了支持: https: //github.com/postmanlabs/postman-app-support/issues/131
  • 对于带有请求正文的 GET 尚未达成共识。(例如,Dropbox 是否仍在使用 POST)

所以你在使用 GET 处理 body 时会遇到问题