gpt4 book ai didi

rest - 如果 GET 请求的响应发生变化,是否尊重幂等性?

转载 作者:行者123 更新时间:2023-12-03 13:33:45 28 4
gpt4 key购买 nike

我读了很多关于 rest API 的书,我总是偶然发现术语幂等性。基本上 GET、HEAD、PUT、DELETE 和 OPTIONS 都是幂等的,而 POST 不是。

本声明在http://www.restapitutorial.com/lessons/idempotency.html让我怀疑我对幂等性的理解。

From a RESTful service standpoint, for an operation (or service call) to be idempotent, clients can make that same call repeatedly while producing the same result. In other words, making multiple identical requests has the same effect as making a single request. Note that while idempotent operations produce the same result on the server (no side effects), the response itself may not be the same (e.g. a resource's state may change between requests).



那么幂等性实际上与服务器工作或响应有关吗?

如果我有什么让我感到困惑
GET /users/5

回来
{
"first_name" : "John",
"last_name" : "Doe",
"minutes_active": 10
}

然后在一分钟后做同样的请求我会得到
GET /users/5
{
"first_name" : "John",
"last_name" : "Doe",
"minutes_active": 11
}

这是如何幂等的?

此外,如果响应包含某种对每个响应都是唯一的 UUID,那会破坏幂等性吗?

最后,幂等性是一次又一次地重复相同的服务器工作,还是一次又一次地为相同/单个请求提供相同的结果?

最佳答案

So does idempotency actually has something to do with server-work or a response?



指的是后续相同类型的请求之后的服务器状态。

因此,假设客户端发出一个请求,将服务器的旧状态(例如 S1)更改为新状态 S2,然后再次发出相同的请求。

如果该方法是幂等的 那么保证第二个请求不会再次改变服务器的状态,它将保持S2。

但是如果方法不是幂等的 ,不能保证状态会保持不变,S2;它可能会更改为服务器想要的任何状态,例如 S3 或 S1。因此,在这种情况下,如果发生通信错误,客户端不应再次发送命令,因为结果将与第一次发送命令的结果不同。

GET /users/5 How is this idempotent?



您可以使用 GET 调用此网址方法任意次数,服务器不会改变其内部状态,即 last_name用户的;如果它不改变它,那么它保持不变,所以 GET 是幂等的。

Furthermore if response contains some kind of UUID which is unique for each response, would that break idempotency?



在相同类型的后续请求之后,响应与服务器的状态无关,因此在每个请求之后响应可能是唯一的,并且请求仍然是幂等的。例如,在您问题的 GET 请求中, minutes_active每分钟都会更大,这不会使 GET 不是幂等的。

幂等方法的其他示例是 DELETE。例如,如果您删除一个用户,那么它就会消失/删除。由于 DELETE 是幂等的,因此在第二次尝试/请求删除同一用户后,该用户将保持已删除状态,因此状态不会改变。当然,第二个响应可能有点不同,比如“警告,用户已经删除”,但这与幂等性无关。

关于rest - 如果 GET 请求的响应发生变化,是否尊重幂等性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44906076/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com