1

它在HTTP Spec中提到PATCHnot幂等的。

幂等性的基本定义是:

幂等 HTTP 方法是可以多次调用而没有不同结果的 HTTP 方法

所以如果我们进行 HTTP 调用

PATCH /users/1
{
    "username": "dummyUser"
}

无论我们在 HTTP 端点上调用多少次,它总是意味着将username用户更新1dummyUser.

PATCH对于更新任何资源的 1 个或多个属性的任何请求,这几乎是相同的。

那为什么 HTTP Spec 规定它PATCHnot幂等的呢?

4

1 回答 1

7

首先,重要的是要澄清这Idempotent: No并不意味着它永远是幂等的,它意味着它不一定是幂等的,即它不是必须的。

因此,在您的示例中,它似乎是幂等的,因为在多次重复调用同一PATCH请求后,资源的状态是相同的。

但是考虑一个假设的PATCH请求,例如:

PATCH /users/1

successful_logins++

successful_logins每次调用此请求时,用户的属性都会增加1。如您所见,它不是幂等的,因为连续的请求会导致对资源的额外修改。

这与该PUT方法相反,该方法必须包含所有资源属性的绝对值。

于 2018-06-12T10:45:42.867 回答