【问题标题】:Does it violate the RESTful when I write stuff to the server on a GET call?当我通过 GET 调用向服务器写入内容时,它是否违反了 RESTful?
【发布时间】:2012-02-23 06:55:30
【问题描述】:

我想在我的网站上记录用户操作,不仅是 POST 请求,还有 GET 请求。例如,假设用户尝试使用以下 GET 请求搜索城市:

/search_city?name=greenville

此请求将返回名称为“greenville”的城市列表。我还想将此关键字保存到服务器,作为用户的“搜索历史”。我打算在 GET 调用的处理过程中保存这些信息。

这是否违反了 RESTful 原则?如果是,我该如何以正确的方式做到这一点?

【问题讨论】:

    标签: rest


    【解决方案1】:

    我认为这种审计日志记录是一种无形的副作用。如果下一个要打电话的人

    /search_city?name=greenville
    

    仍然得到相同的答案,那么你的 GET 是有效的。类似的情况是某种缓存构建,GET 的调用者不需要(需要)知道您正在做一些额外的工作。

    关注正式的 API - 发送这个请求得到这个响应。

    【讨论】:

    • 也就是说,NO,这样做并不违反REST。
    【解决方案2】:

    如果 API 中有一些资源可用,用户搜索历史记录可用,那么这样做是不行的,因为您的 GET 请求具有可见的副作用。例如,缓存响应的客户端没有义务知道任何资源已更改,因为他对其他任何内容进行了 GET 请求。我认为做到这一点并保持合规的唯一方法是明确将副作用资源标记为不可缓存。

    特别是,已经建立了约定,即 GET 和 HEAD 方法不应具有采取除检索之外的操作的意义。这些方法应该被认为是“安全的”。这允许用户代理以特殊的方式表示其他方法,例如 POST、PUT 和 DELETE,以便让用户意识到正在请求可能不安全的操作。

    当然,无法确保服务器不会因为执行 GET 请求而产生副作用;事实上,一些动态资源认为这是一个特性。这里的重要区别是用户没有请求副作用,因此不能对它们负责。

    http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

    如果只保留内部使用,我想这样做很好,但我仍然建议不要这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多