HTTP PUT环境中幂等性的含义?

时间:2014-02-28 16:36:37

标签: http rest put httpverbs idempotent

this presentation on REST(时间戳17:00-18:45)中,发言者说HTTP PUT必须包含资源的所有属性,而不能用于部分更新。这在HTTP中是必需的,否则它不是幂等的。

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

  

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

然而,他接着举了一个例子(转述):

  

请求A:我使用PUT仅更新资源的名称属性。

     

请求B:我使用PUT仅更新说明。

     

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

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

多次运行请求与运行一次具有相同的效果(同样适用于B),所以我认为它是幂等的(即使由于其他原因这是PUT的错误使用)。 / p>

我的理解不正确吗?

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

1 个答案:

答案 0 :(得分:1)

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

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