我有一种情况,我正在努力解决现实世界中的REst GET和POST架构哲学。
我有一个REst调用,它本质上是幂等的。它需要在其有效负载(XML中的保险策略)中使用复杂的数据类型,在其上执行复杂的业务逻辑并返回溢价。它对国家没有任何作用,因此基本上是幂等的。
目前,REst呼叫是一个POST。对此的有效理由是消息体很大并且很可能被丢弃并且使用Internet Explorer变得混乱。但是,它也是幂等的,并且从根本上违反了GET Vs POST。
之前有人遇到过这个难题吗?感谢。
答案 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主体来计算对象缓存密钥。如果您的计算是资源密集型,这可能是一个问题。