我在REST中绝对是新手,我对REST中的安全方法以及幂等方法有什么疑问。
我知道(但可能是错的)GET,HEAD,OPTIONS和TRACE方法被定义为安全的,因为它们仅用于检索数据。
但现在我正在阅读这篇文章:http://restcookbook.com/HTTP%20Methods/idempotency/并且它说:
安全方法是不修改资源的HTTP方法。对于 例如,在资源URL上使用GET或HEAD,不应该改变 资源。
直到这里它还可以,它与我所知道的没什么不同,但在断言之后:
然而,这并非完全正确。这意味着:它不会改变 资源代表。安全方法仍然可行 改变服务器或资源上的东西,但这不应该反映出来 用不同的代表。
究竟是什么意思?究竟是什么代表?什么意味着一个安全的方法如此改变资源但是这个改变没有被反映成一个不同的表示?
然后它也是这个例子:
GET /blog/1234/delete HTTP/1.1
并说这是不正确的,如果这实际上会删除博客帖并断言:
安全方法是可以缓存的方法,不需要任何预取 对资源的影响。
答案 0 :(得分:4)
究竟是什么表达?
A"代表"是从服务器返回的表示对象状态的数据。所以如果你在http://server/puppy/1得到它应该返回一个"表示"小狗(因为它当然不会返回实际的小狗。)
然而,这并非完全正确。这意味着:它不会改变 资源代表。安全方法仍然可行 改变服务器或资源上的东西,但这不应该反映出来 不同的代表。
究竟是什么意思?
他们的意思是如果连续两次GET / server / puppy / 1,它应该给你相同的响应。但是,假设您有一个字段,其中包含每只小狗被查看的次数。该字段用于提供列出前10名观看次数最多的小狗的页面。该信息通过GET / server / puppystats提供。 GET / server / puppy / 1可以更新该信息。但它不应该更新有关小狗本身的信息。或者,如果它更新了有关小狗本身的信息,那么该信息不是GET / server / puppy / 1返回的小狗表示的一部分。它只是通过另一个URL提供的其他表示的一部分。
如果有帮助,这与" mutable"的概念类似。应用于const对象时C ++中的关键字。 "可变"允许您修改对象,但不应该以在类外部可见的方式修改它。