如何以RESTful方式实现“视图”计数器?

时间:2013-07-16 01:47:24

标签: http rest get

在大多数论坛软件上都有一个功能,每当有人阅读某个主题时,该主题的计数器就会增加。这允许用户查看有多少回复,以及主题被读取的次数,例如,决定他们是否想参加某个主题。

示例:

                                           Replies    Views
hydro locked 3.2 M engine worth fixing?    81         2037
Japan Gets BMW M5 Limited Edition Model    760        16392
...
...

当我点击第一个主题时,肯定会发生GET,我可以阅读该主题。

现在,如果有其他人在我之后来到网站,他会看到:

                                           Replies    Views
hydro locked 3.2 M engine worth fixing?    81         2038
Japan Gets BMW M5 Limited Edition Model    760        16392
...
...

因此,第一个主题的观看次数正确地从2037年到2038年。该计数器显然存储在服务器端。

所以我的问题很简单:如果服务器上发生了修改,GET如何才能成为幂等的?

请注意,在所有这些论坛软件中,视图的数量是网站不可或缺的一部分:一个回复非常少的主题,但很多视图通常比一个回复非常少的主题

我了解您可以将某些内容(例如分析)卸载到外部服务(例如Google Analytics),这些内容可以为您提供诸如综合浏览量,浏览器类型等内容。 但是当用户获取资源的行为是您网站不可或缺的一部分时呢?它可以是论坛或拍卖或其他......

GET正在修改服务器上的状态的网站很多。这是否意味着这些网站永远不会是RESTful?

1 个答案:

答案 0 :(得分:3)

GET是幂等的背后的原因是客户端不应该关心多次获取资源的影响。您不希望在资源上执行GET并让它在论坛中创建主题,因为浏览器不会将请求视为具有任何副作用,并且每次URL都会快乐地发布重复项被击中了。

对于POST请求,大多数浏览器的行为都不同,他们会要求您确认确实想要将请求重新提交给服务器,知道它可能有你可能会关心的后果。

我有信心说,这是可以产生这种副作用的情况之一,因为后果非常小,最终用户不会在乎第二次意外地请求资源。

我还建议您希望对您认为“视图”的内容保持警惕,这样它不仅仅计算在资源上执行GET的次数。这样,重复请求就不被视为视图,并且幂等性的点变得更不相关。