一个REST的API中的GET动词Idempotentency(Idempotentency of

2019-11-04 15:43发布

由于这是这里提到https://restfulapi.net/http-methods/ (和在其他地方也一样):

GET API应该是幂等的,这意味着使多个相同的请求必须每次产生相同的结果,直到另一个API(POST或PUT)已经改变资源的状态的服务器。

如何使例如返回时间的API在这回事吗? 或由时间的影响是返回的数据。

换句话说,每一次我用GET http://ip:port/get-time-now/ ,它会返回一个不同的反应。 但是,我没有发任何POSTPUT之间有两个有序GET's

这是否让前面的说法错了吗? 我误解的东西吗?

Answer 1:

等幂是客户/该请求可以在网络故障或类似情况补发没有任何进一步的考虑,没有这么多的数据不会改变中介机构的承诺。

如果你把一个POST例如要求,在网络故障的情况下,你不知道,如果前一个请求到达服务器,但得到的响应中途丢失或如果初始请求甚至没有到达服务器的。 如果重新发出请求,你实际上可能创建一个进一步的资源,因此, POST不是幂等。 PUT在另一侧上具有其替换包含在所述请求中的一个当前表示的合同。 如果您发送相同的请求两次资源的内容应该是任何两个后相同PUT请求进行处理。 请注意,实际结果仍然可以作为不同的服务是免费的修改收到实体相应的表示。 另外,通过发送数据之间PUT ,并通过检索它GET进一步的客户端可以在两者之间有更新的状态,所以没有保证,你会真正收到你发送到服务的具体表现。

Saftiness是其他的承诺,只有GETHEADOPTIONS支持。 它承诺,它不会改变任何状态都因此客户/中间商都在发出这样的请求,而不必担心它会修改任何国家安全的调用。 在实践中,这是爬虫一味调用的任何URL,以了解其内容的重要承诺。 在违反这样的许诺,通过删除数据而处理的,即壳体GET请求唯一一个怪是服务实现而不是调用者。 如果一个履带式调用此类URL,从而消除一些数据是不是爬虫居然错,但只有服务实现。

当你在你的响应动态值,您可能想阻止响应缓存,虽然另有中介可能返回老态为你的资源



文章来源: Idempotentency of GET verb in an RESTful API