【发布时间】:2012-06-18 21:14:00
【问题描述】:
我想实现一个 REST API,并且我的 GET 请求需要一个正文。 (就像这里讨论的:HTTP GET with request body)
是否存在无法通过 GET 请求发送正文的 http 客户端? Fiddler 可以做到,虽然消息框是红色的。
【问题讨论】:
标签: .net rest asp.net-web-api http-get frombodyattribute
我想实现一个 REST API,并且我的 GET 请求需要一个正文。 (就像这里讨论的:HTTP GET with request body)
是否存在无法通过 GET 请求发送正文的 http 客户端? Fiddler 可以做到,虽然消息框是红色的。
【问题讨论】:
标签: .net rest asp.net-web-api http-get frombodyattribute
作为一般规则,REST 中的 GET 想法是您的任何参数都在 URL 中发送。正如您所包含的问题的答案所表明的那样,它是可行的,但错过了 REST 的要点,即拥有一致的 webbish 界面。如果您想将复杂的数据传递到您的端点,您可能需要使用 POST,您的用户会期望它有一个正文。我强烈建议重新考虑该实施。
但是对于您的实际问题,确定有些客户端无法通过 GET 发送正文。大多数情况下,我会想象您的客户将是编程的,例如 python 的 urlib2,虽然您可以在 GET 上设置一个主体,但这并不是该模块的真正预期用途,因此您正在强制程序员变得奇怪。更重要的是,REST api 的理念是与客户端无关,这就是为什么我觉得您的 API 设计应该在这里重新设计。
【讨论】:
在 GET HTTP 请求中使用正文是个坏主意。是的,似乎“法律上”的 HTTP GET 可以有正文,但“事实上”你会遇到问题:
你在寻找艰难的道路吗?使用带有身体的 GET,您将遇到很多陷阱。为什么不使用其他 HTTP 动词?
例如使用 POST(或其他动词),比:
不要寻找更难的方法:)
【讨论】:
A message-body MUST NOT be included in a request if the specification of the request method (section 5.1.1) does not allow sending an entity-body in requests. 5.1.1 中的 GET 规范似乎没有“不允许”。