【问题标题】:REst GET Vs POST with big message body带有大消息正文的 REST GET 与 POST
【发布时间】:2013-02-14 15:51:08
【问题描述】:
我有一种情况,我正在努力应对现实世界中的 REst GET 和 POST 架构哲学。
我有一个本质上是幂等的 REst 调用。它需要在其有效负载中包含复杂的数据类型(XML 中的保险单),对其执行复杂的业务逻辑并返回溢价。它对状态没有任何作用,因此本质上是幂等的。
目前,REst 调用是一个 POST。对此的有效理由是消息体很大,很可能会被丢弃并与 Internet Explorer 混淆。但是,它也是幂等的,从根本上违反了 GET Vs POST。
以前有人遇到过这个难题吗?谢谢。
【问题讨论】:
标签:
http
rest
architecture
http-post
http-get
【解决方案1】:
我不确定暗示是否可逆:
GET SHOULD be idempotent 是已定义的,但没有什么禁止 POST 是幂等的。
代替你,我会选择POST 方法。另外,如果您的请求包含一个实体,它不能是GET
【解决方案2】:
我有同样的问题,我的解决方案是务实的。我的 API 在遇到 GET 请求限制时甚至使用 POST 来实现幂等,所以:
If the form data would contain non-ASCII characters or;
If the form data set is large.
我认为还有其他例外,但我现在想不出一个。
更新:还有一个例外,如果由于某种原因我不希望参数在请求 url 中可见,我也使用 POST 来实现幂等性。
【解决方案3】:
虽然我不认为对大主体 GET 使用 POST 请求有很好的替代方法,但您应该记住,POST 请求通常不会被(反向)代理缓存。大多数 HTTP 缓存(我知道)在计算对象缓存键时不会考虑 POST 正文。如果您的计算是资源密集型的,这可能是个问题。