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