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

时间:2018-06-12 10:15:52

标签: http specifications http-patch

HTTP Spec上提及PATCH not是幂等的。

幂等的基本定义是:

  

幂等HTTP方法是一种可以多次调用的HTTP方法   时间没有不同的结果

所以如果我们进行HTTP调用

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

无论我们在HTTP端点上方调用多少次,它总是意味着将用户username的{​​{1}}更新为1

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

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

1 个答案:

答案 0 :(得分:7)

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

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

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

PATCH /users/1

successful_logins++

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

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