V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
RIcter
V2EX  ›  分享发现

RESTful的一个小悖论?

  •  
  •   RIcter · 2014-01-24 21:17:42 +08:00 · 3153 次点击
    这是一个创建于 3768 天前的主题,其中的信息可能已经有所发展或是发生改变。
    举例子~
    一个遵循RESTful标准的Blog system,想记录点击数~
    这样每次GET请求后,数据库的click就加1~
    那么这个Blog system就不遵循RESTful标准了~
    因为GET是不能改变数据的..

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

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

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

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

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

    这种情况,计数器得做成子资源吧?
    RIcter
        14
    RIcter  
    OP
       2014-01-28 14:33:51 +08:00
    @akinoniku 0w0 欸~
    kslr
        15
    kslr  
       2014-11-13 11:17:56 +08:00
    put
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4793 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 09:36 · PVG 17:36 · LAX 02:36 · JFK 05:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.