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

mko*_*mko 6 api rest api-design idempotent

我正在阅读很多关于rest API的内容,而且我总是偶然发现术语幂等性.基本上GET,HEAD,PUT,DELETE和OPTIONS都是幂等的,而POST则不是.

这篇关于http://www.restapitutorial.com/lessons/idempotency.html的声明让我怀疑我对幂等性的理解.

从RESTful服务的角度来看,要使操作(或服务调用)具有幂等性,客户端可以在产生相同结果的同时重复进行相同的调用.换句话说,发出多个相同的请求与发出单个请求具有相同的效果.请注意,虽然幂等操作在服务器上产生相同的结果(没有副作用),但响应本身可能不相同(例如,资源的状态可能在请求之间发生变化).

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

如果我有什么困惑我

GET /users/5
Run Code Online (Sandbox Code Playgroud)

回国

{
"first_name" : "John",
"last_name" : "Doe",
"minutes_active": 10
}
Run Code Online (Sandbox Code Playgroud)

然后我会在一分钟后做同样的请求

GET /users/5
{
"first_name" : "John",
"last_name" : "Doe",
"minutes_active": 11
}
Run Code Online (Sandbox Code Playgroud)

这是幂等的吗?

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

最后,同一性服务器的幂等性是一遍又一遍,还是一遍又一遍地对同一/单个请求产生相同的结果?

Con*_*enu 6

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

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

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

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

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

GET /users/5 这是如何幂等的?

您可以使用GET方法多次调用此 url,并且服务器不会更改其内部状态,即last_name用户的内部状态;如果它不改变它,那么它保持不变,因此 GET 是幂等的。

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

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

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