RESTful的一个小悖论?

2014-01-24 21:17:42 +08:00
 RIcter
举例子~
一个遵循RESTful标准的Blog system,想记录点击数~
这样每次GET请求后,数据库的click就加1~
那么这个Blog system就不遵循RESTful标准了~
因为GET是不能改变数据的..

难不成打开后用js调用PUT方法QAQ?
OK,如果就是这样..↑↑↑
那么,我要是想记录某一地址,比如/articles/1的被GET的次数,无论是搜索引擎爬虫的GET,还是禁用了js的GET..那么就不能遵守RESTful了吧...?

orz
3169 次点击
所在节点    分享发现
15 条回复
binux
2014-01-24 21:37:24 +08:00
先不考虑REST是一种风格而不是一个标准
GET是允许cache的,那这时候不+1是不是与需求相悖?
mytharcher
2014-01-24 21:45:53 +08:00
所以统计要去日志里做
min
2014-01-24 21:46:44 +08:00
变的是/articles/1/count,/articles/1又不会变
alexapollo
2014-01-24 21:55:45 +08:00
REST不是标准,仅是一组约束条件而已
我觉得更关键的是URI和标准方法的组合形式
family
2014-01-24 21:59:02 +08:00
新浪 腾讯 等api 都号称rest 但哪个遵循了?
pyKun
2014-01-24 22:04:31 +08:00
API不用都restful的,API也没法都restful,只是很典型的一部分API可以是restful的
flytwokites
2014-01-24 22:05:46 +08:00
你这个记数本身不就是记GET了多少次的数吗?哪里有悖论了?
bcxx
2014-01-24 22:06:40 +08:00
需求是要不幂等的,但是你举一个幂等的例子当然有问题啦
loading
2014-01-24 22:19:49 +08:00
它只是一种提示,我把它与我的需求融合(主要是我太水)
otakustay
2014-01-24 23:25:40 +08:00
需求上要求阅读不是一个幂等的操作,那么REST就不适合支持你的系统,就这么简单的事呗……
flytwokites
2014-01-25 09:42:11 +08:00
REST的定义是:

GET请求不能更改业务实体,多次重复请求也不会产生有害操作。
POST请求可以更改业务实体,所以不能重试,比如业务实体是订单的话重试会生成重复订单。

你的API记数和业务实体没有关系,GET请求不会更改API操作的业务实体,所以你的API还是REST的。

就好比所有网站都有访问请求日志,这些日志要写进数据库或log文件,当然GET请求也有日志要写,这不代表所有网站都不是REST了,因为请求日志不影响业务实体。
wulin
2014-01-25 14:27:15 +08:00
没有,你get的只是文章,文章没有改变
put的是浏览记录,应该分开对待
akinoniku
2014-01-28 14:24:29 +08:00
应该把它看作是 [对外] 幂等,内部怎么处理又是另外一回事了。

这种情况,计数器得做成子资源吧?
RIcter
2014-01-28 14:33:51 +08:00
@akinoniku 0w0 欸~
kslr
2014-11-13 11:17:56 +08:00
put

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/98257

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX