RESTful API 中 GET 动词的幂等性

Idempotentency of GET verb in an RESTful API

正如这里提到的 https://restfulapi.net/http-methods/(以及其他地方):

GET APIs should be idempotent, which means that making multiple identical requests must produce same result everytime until another API (POST or PUT) has changed the state of resource on server.

例如,如何在 API 那个 return 时间实现这一点?或者 return 受时间影响的数据。

换句话说,每次我使用 GET http://ip:port/get-time-now/,它都会 return 不同的响应。但是,我没有在两个 GET's

之间发送任何 POSTPUT

这会使前面的说法错误吗?我是不是误会了什么?

幂等性是对 clients/intermediaries 的承诺,即在出现网络故障或类似情况时可以重新发出请求而无需任何进一步考虑,而且数据永远不会改变。

如果您以 POST 请求为例,在网络故障的情况下,您不知道之前的请求是否已到达服务器但响应中途丢失,或者初始请求甚至没有完全到达服务器。如果您 re-issue 您实际上可能会创建更多资源的请求,因此 POST 不是幂等的。 PUT 另一方有合同,它将当前表示替换为请求中包含的表示。如果您两次发送相同的请求,那么在处理完两个 PUT 请求中的任何一个之后,资源的内容应该是相同的。请注意,实际结果仍然可能有所不同,因为服务可以自由地将接收到的实体修改为相应的表示形式。此外,在通过 PUT 发送数据和通过 GET 检索数据之间,另一个客户端可能已经更新了两者之间的状态,因此不能保证您实际上会收到您发送给的确切表示服务。

安全是另一种承诺,只有 GETHEADOPTIONS 支持。它向调用者承诺它根本不会修改任何状态,因此 clients/intermediaries 在发出此类请求时是安全的,而不必担心它会修改任何状态。在实践中,这是对盲目调用任何 URL 以了解其内容的爬虫的重要承诺。如果违反此类承诺,即在处理 GET 请求时删除数据,唯一的责任是服务实现者而不是调用者。如果爬虫调用此类 URL 并因此删除了一些数据,那实际上不是爬虫的错,而只是服务实现者的错。

由于您的响应中有一个动态值,您可能希望防止缓存响应,否则中介可能 return 您的资源的旧状态

HTTP的idempotentsafe方法的主要基本概念:-

幂等方法:-该方法可以使用相同的输入多次调用并产生相同的结果。

安全方法:-该方法可以使用相同的输入多次调用,并且不会修改服务器端的资源。

Http 方法分为以下 3 组-

  1. GET、HEAD、OPTIONS 是 安全的幂等的
  2. PUT、DELETE 不安全幂等
  3. POST,PATCH 既不安全 & 也不幂等