在这个关于 REST 的演示文稿中(时间戳 17:00-18:45),演讲者说 HTTPPUT
必须包含资源的所有属性,并且不能用于部分更新。这在 HTTP 中是必需的,否则它不是幂等的。
他对幂等性的定义是(这听起来很合理):
幂等是可以执行一次或多次并导致相同服务器状态的任何操作
然而,他接着举了一个例子,其中(意译):
请求 A:我使用 a
PUT
仅更新资源的 name 属性。请求 B:我使用 a
PUT
仅更新描述。在 A 和 B 之间,另一个客户端可以指定名称,然后在请求 B 之后,资源具有另一个客户端的名称和我的描述。因为请求 A 和 B 之后服务器状态不一样,所以这不是幂等操作。
我不确定这种解释:对我来说,幂等性只告诉你当你连续多次运行相同的操作时会发生什么。在上面的例子中,请求 A 和 B 是两个不同的操作,所以没有理由认为运行 A then B 应该有什么特别的保证;特别是,没有理由认为它们应该一起构成一个原子操作。
多次运行请求 A 与运行一次具有相同的效果(对于 B 也是如此),所以我认为它是幂等的(即使PUT
由于其他原因这是不正确的使用)。
我的理解不正确吗?
(注意:这是一个关于幂等性含义的问题,而不是 的适当使用PUT
)。