关于在REST Api中获取数据时获取请求idenpotency

关于在REST Api中获取数据时获取请求idenpotency,rest,http,request,Rest,Http,Request,在RESTAPI中,对相同url的GET请求应该返回相同的响应。我可以将其用于静态资源,但如果我(例如)通过json响应获取用户数据,然后发布一些更改,我希望如果我稍后执行另一个get请求,这些更改将得到反映 我应该使用另一个动词(我认为我很好地实现了获取的想法),否则这种风格在AJAX中不起作用。两者都可以。GET的幂等性不假设其他操作。如中所述,即使执行的所有方法都是幂等的,几个请求的序列也可能不是幂等的 因此,两个GET请求有可能返回不同的数据,因此我们有了ETag的概念,客户端可以使用E

在RESTAPI中,对相同url的GET请求应该返回相同的响应。我可以将其用于静态资源,但如果我(例如)通过json响应获取用户数据,然后发布一些更改,我希望如果我稍后执行另一个get请求,这些更改将得到反映


我应该使用另一个动词(我认为我很好地实现了获取的想法),否则这种风格在AJAX中不起作用。两者都可以。

GET的幂等性不假设其他操作。如中所述,即使执行的所有方法都是幂等的,几个请求的序列也可能不是幂等的

因此,两个GET请求有可能返回不同的数据,因此我们有了ETag的概念,客户端可以使用ETag与If Match之类的前提条件类型头相结合来检测是否发生了更改。

不要混合使用“幂等”和“安全”概念。GET是“安全的”,因为服务器不应该因为GET而改变任何可观察的状态。客户端可以在同一URL上发布任意数量的GET,而无需更改服务器上的任何状态。幂等式意味着“如果同一请求被多次发出,那么服务器状态将始终与仅发出一个请求时相同”


这与“服务器将始终返回相同的GET响应”不同,因此您的基本假设是错误的:GET每次都可以返回新结果。以一天中的某个时间资源为例,它总是为每个请求返回一个新值。

Hmm。。我想知道。Google开发者强调了缓存GET响应,这只有在它真正响应相同的情况下才有意义。这些都是缓存的好候选对象。其他资源变化很大,不应缓存。找出哪些资源是可缓存的——并将数据拆分为静态、可缓存的资源和不可缓存的不稳定资源,这是资源设计的一个重要部分。谢谢!我真的没有进入这方面。我注意到一些东西被浏览器缓存,在这个阶段很烦人,也许我可以让服务器以一种特殊的方式响应,这样我的html就不会被缓存。是的,我希望服务器的默认行为能够启用html文件的缓存。搜索“http缓存头”以获得有关缓存的更多一般信息(这似乎是一个不错的介绍:)。您引用的是一个过时的规范。相反,请参见。由于您是您引用的提案的作者之一,除了引用较旧的RFC外,或许您可以解释我所述的内容是如何不正确的?“安全”方法的幂等性必须假定基础数据不发生任何变化,除非新提案建议所有资源的名称中都应包含版本以保证幂等性?我的评论只是使用了一个过时的引用,而不是您答复的实际内容。我有点希望您的观点,但我承认,关于SO的评论部分可能不是这样做的地方:)。不过,谢谢你的建议!这不是一个“提案”,而是新的规范。