1

这个关于 REST 的演示文稿中(时间戳 17:00-18:45),演讲者说 HTTPPUT必须包含资源的所有属性,并且不能用于部分更新。这在 HTTP 中是必需的,否则它不是幂等的。

他对幂等性的定义是(这听起来很合理):

幂等是可以执行一次或多次并导致相同服务器状态的任何操作

然而,他接着举了一个例子,其中(意译):

请求 A:我使用 aPUT仅更新资源的 name 属性。

请求 B:我使用 aPUT仅更新描述。

在 A 和 B 之间,另一个客户端可以指定名称,然后在请求 B 之后,资源具有另一个客户端的名称和我的描述。因为请求 A 和 B 之后服务器状态不一样,所以这不是幂等操作。

我不确定这种解释:对我来说,幂等性只告诉你当你连续多次运行相同的操作时会发生什么。在上面的例子中,请求 A 和 B 是两个不同的操作,所以没有理由认为运行 A then B 应该有什么特别的保证;特别是,没有理由认为它们应该一起构成一个原子操作。

多次运行请求 A 与运行一次具有相同的效果(对于 B 也是如此),所以我认为它是幂等的(即使PUT由于其他原因这是不正确的使用)。

我的理解不正确吗?

(注意:这是一个关于幂等性含义的问题,而不是 的适当使用PUT)。

4

1 回答 1

1

你说的对; 部分更新可以是幂等的。

这并没有改变 PUT 不用于部分更新的事实;如果您需要部分更新,您应该使用 PATCH。

于 2014-02-28T16:59:04.903 回答