我想在我的网站上记录用户操作,不仅是在POST请求上,还在GET请求上。例如,假设用户尝试使用以下GET请求搜索城市:
/ search_city?名称=格林维尔
此请求将返回名为“greenville”的城市列表。我还想将此关键字保存到服务器,作为用户的“搜索历史记录”。我打算在处理GET调用期间保存此信息。
这是违反RESTful原则的吗?如果是,我该如何正确地做到这一点?
答案 0 :(得分:3)
我认为这种审核记录是一种看不见的副作用。如果下一个人打电话
/search_city?name=greenville
仍然获得相同的答案,然后您的GET有效。类似的情况是某种缓存构建,GET的调用者不需要(需要)知道你正在做一些额外的工作。
专注于正式的API - 发送此请求获得此响应。
答案 1 :(得分:1)
如果API中有一些资源可用,那么用户搜索历史记录可用,那么这样做是不可行的,因为您的GET请求具有明显的副作用。例如,客户端缓存响应没有义务知道任何资源发生了变化,因为他对其他任何事情都做了GET请求。我认为实现这一目标并保持合规的唯一方法是明确将副作用资源标记为不可缓存。
特别是,已经确定了GET和HEAD方法不具有采取除检索之外的动作的重要性的约定。这些方法应该被认为是“安全的”。这允许用户代理以特殊方式表示其他方法,例如POST,PUT和DELETE,以便让用户知道正在请求可能不安全的操作。
当然,无法确保服务器不会因执行GET请求而产生副作用;实际上,一些动态资源会考虑这个功能。这里的重要区别是用户没有请求副作用,因此不能对他们负责。
http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
如果这仅仅是为了内部使用,我想这样做很好,但我仍然建议不要这样做。