4

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

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

目前,REST 调用是一个 POST。对此的有效理由是消息体很大,很可能会被丢弃并与 Internet Explorer 混淆。但是,它也是幂等的,从根本上违反了 GET Vs POST。

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

4

3 回答 3

3

我不确定这暗示是否可逆:

GET SHOULD be idempotent是已定义的,但没有什么POST可以禁止幂等。

在你的位置,我会去的POST方法。另外,如果您的请求包含一个实体,它不能是GET

于 2013-02-14T15:58:50.130 回答
2

我有同样的问题,我的解决方案是务实的。当面临 GET 请求限制时,我的 API 甚至使用 POST 来实现幂等,因此:

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

我认为还有其他例外,但我现在想不出一个。

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

于 2013-02-14T15:59:32.990 回答
1

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

于 2013-02-24T01:51:15.017 回答