我想计算对资源的访问权限,但HTTP GET不应该修改资源。计数器应与资源一起显示。类似的情况是存储最后一次访问。
实现视图计数器的REST方法是什么?
答案 0 :(得分:4)
更新计数器以响应GET实际上并不违反HTTP协议。您不是要修改您获得的资源,也不是修改客户端可以控制的任何其他资源 如果服务器不允许执行任何更新以响应GET,则日志文件将违反HTTP合同!
以下是RFC2616中的相关部分:
9.1.1安全方法
执行者应该意识到这一点 软件代表他们的用户 互联网上的互动,和 应该小心允许用户 注意他们可能采取的任何行动 拿出可能出乎意料的 对自己或他人的意义。
特别是,惯例已经 建立了GET和HEAD 方法不应该有 采取行动的重要性 而不是检索。这些方法应该 被认为是“安全的”。这允许用户 代理人代表其他方法, 例如POST,PUT和DELETE,在 特殊的方式,使用户成为 意识到可能的事实 正在要求采取不安全行动。
当然,这是不可能的 确保服务器没有 产生副作用的结果 执行GET请求;事实上, 一些动态资源考虑到了 特征。重要的区别 这是用户没有请求 副作用,所以不能 对他们负责。
要注意的第一个重要事项是它说“不应该”而不是“绝不”。有些情况下副作用有效。
第二个关键线是最后一行,它强调了用户没有提出任何需要进行更改的请求的事实,因此服务器需要确保不会发生任何与客户期望相矛盾的事情。 。这是“统一界面约束”的本质。服务器应该做客户期望的事情。这与发布
的客户非常不同GET /myresource?operation=delete
在这种情况下,客户认为他们正在进行检索。如果客户端应用程序遵守超媒体约束,则URL的内容完全不透明,因此客户端可以理解的唯一信息是动词GET。如果服务器实际上执行了删除,则明显违反统一接口约束。
更新内部计数器不违反统一接口约束。如果要将计数器包含在要检索的表示中,那么您将遇到一组全新的问题,但我认为情况并非如此。