REST API:使用正文获取请求

时间:2012-06-18 21:14:00

标签: .net rest asp.net-web-api http-get frombodyattribute

我想实现一个REST API,并且需要在我的GET请求上使用正文。 (如下所述:HTTP GET with request body

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

2 个答案:

答案 0 :(得分:27)

作为一般规则,REST中GET的概念是您的任何参数都在URL中发送。正如你所包含的问题的答案所表明的那样,它是可行的,但是忽略了REST的重点,那就是拥有一致的webbish界面。如果要将复杂数据传递到端点,则可能需要使用POST,用户希望该POST具有正文。我强烈建议重新考虑这种实施。

但是对于您的实际问题,确定有客户无法在GET上发送正文。大多数情况下,我想你的客户端将是程序化的,比如python的urlib2,而你可以在GET上设置一个主体,它实际上不是模块的预期用途,所以你强迫程序员变得奇怪。更重要的是,REST api的想法是与客户端无关,这就是为什么我觉得你的API设计应该在这里重新设计。

答案 1 :(得分:9)

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

  1. 使用客户端框架/库。很难找到它的支持。
  2. 服务器可以忽略GET请求的主体。无论如何,这不是标准方式,可能是服务器或配置问题。
  3. 它使你的代码,特别是在服务器端,对其他人不清楚,因为没有人会期望GET与身体。
  4. 你在寻找艰难的方式吗?随着身体的GET,你会遇到很多陷阱。为什么不使用其他HTTP动词?

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

    1. 很容易就已经准备好了客户端库,
    2. 服务器或服务器配置没有问题,
    3. 对其他人来说很清楚
    4. 不要寻找更难的方法:)