我正在阅读Leonard Richardson和Mike Amundsen编写的
客户端可以流水线化任意系列的幂等HTTP请求,只要该系列作为整个也是幂等的即可。 […]
我将通过管道发送两个请求。首先,我将检索资源的表示形式,然后删除资源:
GET /resource
DELETE /resource
GET和DELETE是幂等的,但它们的组合不是幂等的。如果在我发送这些请求后出现网络问题,而我没有从管道中得到第一个响应,那么我将无法再次发送请求并获得相同的结果。该资源将不再存在。
在我的理解中,幂等性意味着在多次发送请求之后,资源状态与仅发送一次请求之后的资源状态相同。在这种特殊情况下,资源状态保持不变,因为在第二次请求后资源仍被删除。
为什么作者认为此请求组合不是幂等的?
答案 0 :(得分:2)
您是对的,系统状态将是相同的,但是听起来他们正在使用该术语指出客户端的视图将是不同的。 (即,第二次在GET上的响应将是404,而不是200。)我认为您对“幂等”的解释更好,但是我也可以理解他们试图提出的观点。
答案 1 :(得分:0)
术语"idempotent" and "safe"适用于单个请求。作者在此认为它也适用于多个请求。
为了理解它们的含义,您必须了解他们的意图。完成请求的流水线以减少延迟。因此,客户端应用程序的开发人员准备并在同一连接上连续触发GET和DELETE,而无需等待第一个响应。
他们这样做的前提是将成功收到对GET的响应,然后可以安全地执行DELETE。假定客户端应用程序必须读取GET响应,例如,将其存储在本地,然后可以丢弃服务器版本。
现在,如果由于某种原因在客户端可以读取对GET请求的响应之前断开连接,服务器上的资源仍将被删除-客户端将无法通过重试请求来获取资源。因此,从这种意义上讲,这种请求组合不被视为“幂等”。