【问题标题】:Can HTTP GET be used if there are small side-effects?如果有小的副作用,可以使用 HTTP GET 吗?
【发布时间】:2016-12-28 09:45:26
【问题描述】:

据我所知,GET 必须是幂等的 - 它不能更改系统中的任何内容,并且重复它应该始终返回相同的结果,除非有其他东西改变了应用程序的状态。

问题是,在我的网站上,根据用户之前是否已经看过某些内容,应该会有很多小的变化。我的意思是,像通知、新消息警报、基于用户是否看到的内容排序、有多少用户看到了内容计数器......例如,当用户点击通知时,通知应该从他的通知面板中消失,并且永远不会再次看到那里,所以它改变了一些东西 - 通知的状态,但我可以按我想要的次数按 F5,它总是返回具有相同信息、相同按钮等的相同页面。

我可以忽略这种副作用太小,我可以使用 GET 还是我必须让网站上的大多数链接和按钮使用 POST,就像我对链接和按钮所做的那样,这会导致更“严重”的变化?我通过在每个表单周围制作表单,将这些链接作为表单操作,将原始按钮作为表单的提交按钮,这对我来说似乎有点混乱,而且我几乎不希望它无处不在(或者有更好的方法吗?) .

【问题讨论】:

标签: html http get idempotent


【解决方案1】:

这可以从几个角度来解决,我会从这个角度来说明:

这里的最终结果总是一样的,因此请求幂等的。

用户访问该URL,最终结果是通知被清除。他们可以一次又一次地访问该页面,最终结果是通知被清除。他们不会收到错误消息,因为通知之前已被清除(这不是幂等的)。是的,他们每次访问该页面时都会看到不同的内容,但没有说每次请求资源时页面内容都必须相同(这会使一半的网络处于绑定状态)。

与对/questions 的 POST 请求(例如,这会创建一个新问题)进行对比:每次您重复该 POST 请求时,都会创建一个全新的资源。您发布一次,/questions/12345 正在创建中。您重复相同的请求,/questions/12346 正在创建中。那是幂等的。

不,您不需要将所有这些请求都变成 POST 请求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 2021-07-10
    • 2019-11-18
    • 1970-01-01
    • 2019-08-06
    • 2022-07-14
    相关资源
    最近更新 更多