RESTful视图计数器

时间:2010-01-27 09:24:02

标签: http rest resources counter

我想计算对资源的访问权限,但HTTP GET不应该修改资源。计数器应与资源一起显示。类似的情况是存储最后一次访问。

实现视图计数器的REST方法是什么?

1 个答案:

答案 0 :(得分:4)

更新计数器以响应GET实际上并不违反HTTP协议。您不是要修改您获得的资源,也不是修改客户端可以控制的任何其他资源 如果服务器不允许执行任何更新以响应GET,则日志文件将违反HTTP合同!

以下是RFC2616中的相关部分:

  

9.1.1安全方法

     

执行者应该意识到这一点   软件代表他们的用户   互联网上的互动,和   应该小心允许用户   注意他们可能采取的任何行动   拿出可能出乎意料的   对自己或他人的意义。

     

特别是,惯例已经   建立了GET和HEAD   方法不应该有   采取行动的重要性   而不是检索。这些方法应该   被认为是“安全的”。这允许用户   代理人代表其他方法,   例如POST,PUT和DELETE,在   特殊的方式,使用户成为   意识到可能的事实   正在要求采取不安全行动。

     

当然,这是不可能的   确保服务器没有   产生副作用的结果   执行GET请求;事实上,   一些动态资源考虑到了   特征。重要的区别   这是用户没有请求   副作用,所以不能   对他们负责。

要注意的第一个重要事项是它说“不应该”而不是“绝不”。有些情况下副作用有效。

第二个关键线是最后一行,它强调了用户没有提出任何需要进行更改的请求的事实,因此服务器需要确保不会发生任何与客户期望相矛盾的事情。 。这是“统一界面约束”的本质。服务器应该做客户期望的事情。这与发布

的客户非常不同
GET /myresource?operation=delete

在这种情况下,客户认为他们正在进行检索。如果客户端应用程序遵守超媒体约束,则URL的内容完全不透明,因此客户端可以理解的唯一信息是动词GET。如果服务器实际上执行了删除,则明显违反统一接口约束。

更新内部计数器不违反统一接口约束。如果要将计数器包含在要检索的表示中,那么您将遇到一组全新的问题,但我认为情况并非如此。