在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
)的恰当用法。
答案 0 :(得分:1)
这不会改变PUT不用于部分更新的事实;如果你需要部分更新,你应该使用PATCH。