26

我想实现一个 REST API,并且在我的 GET 请求上需要一个正文。(就像这里讨论的:HTTP GET with request body

是否存在无法通过 GET 请求发送正文的 http 客户端?Fiddler 能够做到这一点,尽管消息框是红色的。

4

2 回答 2

33

作为一般规则,REST 中 GET 的想法是您的任何参数都在 URL 中发送。正如您所包含的问题的答案所示,它是可行的,但错过了 REST 的要点,即拥有一致的 webbish 界面。如果您想将复杂的数据传递到您的端点,您可能需要使用 POST,您的用户会期望它有一个正文。我强烈建议重新考虑该实施。

但是对于您的实际问题,请确保有些客户端无法在 GET 上发送正文。大多数情况下,我会想象您的客户将是编程的,例如 python 的 urlib2,虽然您可以在 GET 上设置一个主体,但这并不是该模块的真正预期用途,因此您迫使程序员变得怪异。更重要的是,REST api 的想法是与客户端无关,这就是为什么在我看来你的 API 设计应该在这里重新设计。

于 2012-06-18T21:24:00.540 回答
10

在 GET HTTP 请求中使用 body 是个坏主意。是的,似乎“法律上”的 HTTP GET 可以有正文,但“事实上”你会遇到问题:

  1. 使用客户端框架/库。很难找到它的支持。
  2. 服务器可以忽略 GET 请求的主体。无论如何,这不是标准方式,可能是服务器或其配置的问题。
  3. 它使您的代码,尤其是在服务器端,对其他人来说不清楚,因为没有人会期望 GET 带有正文。

你在寻找艰难的道路吗?使用带有身体的 GET,您将遇到很多陷阱。为什么不使用其他 HTTP 动词?

例如使用 POST(或其他一些动词),而不是:

  1. 准备好客户端库很容易,
  2. 服务器或服务器配置没有问题,
  3. 其他人很清楚

不要寻找更难的方法:)

于 2012-06-18T21:42:12.073 回答