为什么HTTP PATCH请求方法不是幂等的

Naz*_*ain 1 specifications http http-patch

它在HTTP Spec上提到PATCHnot幂等的.

幂等的基本定义是:

幂等HTTP方法是一种HTTP方法,可以多次调用而不会产生不同的结果

所以如果我们进行HTTP调用

PATCH /users/1
{
    "username": "dummyUser"
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

e.d*_*dan 7

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

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

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

PATCH /users/1

successful_logins++
Run Code Online (Sandbox Code Playgroud)

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

这与该PUT方法形成对比,该方法必须包含所有资源属性的绝对值.