REst GET与大消息体的POST

时间:2013-02-14 15:51:09

标签: http rest architecture http-post http-get

我有一种情况,我正在努力解决现实世界中的REst GET和POST架构哲学。

我有一个REst调用,它本质上是幂等的。它需要在其有效负载(XML中的保险策略)中使用复杂的数据类型,在其上执行复杂的业务逻辑并返回溢价。它对国家没有任何作用,因此基本上是幂等的。

目前,REst呼叫是一个POST。对此的有效理由是消息体很大并且很可能被丢弃并且使用Internet Explorer变得混乱。但是,它也是幂等的,并且从根本上违反了GET Vs POST。

之前有人遇到过这个难题吗?感谢。

3 个答案:

答案 0 :(得分:2)

我不确定这种含义是否可逆:

GET SHOULD be idempotent是定义的内容,但没有任何内容禁止POST是幂等的。

在你的位置,我会选择POST方法。另外,如果您的请求包含实体,则不能是GET

答案 1 :(得分:2)

我有同样的问题,我的解决方案是务实的。面对GET请求限制时,我的API甚至在幂等时使用POST,所以:

If the form data would contain non-ASCII characters or;
If the form data set is large.

我认为还有其他例外情况,但我现在想不出来。

更新:还有一个例外,如果由于某种原因,我不希望在请求URL中显示参数我也使用POST进行幂等。

答案 2 :(得分:0)

虽然我认为对大型机构GET使用POST请求有一个很好的替代方法,但您应该记住,POST请求通常不会被(反向)代理缓存。大多数HTTP缓存(我都知道)不会考虑POST主体来计算对象缓存密钥。如果您的计算是资源密集型,这可能是一个问题。