restful API 中,signIn 和 signUp,以及 signOut,你们怎么设计 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
refresh
V2EX    问与答

restful API 中,signIn 和 signUp,以及 signOut,你们怎么设计

  •  
  •   refresh 2014-06-17 21:58:29 +08:00 28980 次点击
    这是一个创建于 4209 天前的主题,其中的信息可能已经有所发展或是发生改变。
    统一用一个接口,然后crud?还是写四个接口
    第 1 条附言    2014-06-18 20:33:55 +08:00
    patch你们常用么,蛮多浏览器不支持,但实际上我们也可以用_method的方式来解决这个问题,你们会这么用么。
    有没有常常某个资源可能只有一个操作,比如说post,而其它操作都不会有。
    15 条回复    2015-07-30 18:47:27 +08:00
    refresh
        1
    refresh  
    OP
       2014-06-17 22:00:24 +08:00   1
    mytharcher
        2
    mytharcher  
       2014-06-17 22:49:56 +08:00   9
    1L帖子里说的比较科学,登入/登出对应的服务端资源应该是session,所以相关api应该如下:

    GET /session # 获取会话信息
    POST /session # 创建新的会话(登入)
    PUT /session # 更新会话信息
    DELETE /session # 销毁当前会话(登出)

    而注册对应的资源是user,api如下:

    GET /user/:id # 获取id用户的信息
    POST /user # 创建新的用户(注册)
    PUT /user/:id # 更新id用户的信息
    DELETE /user/:id # 删除id用户(注销)
    binux
        3
    binux  
       2014-06-17 23:02:04 +08:00
    我觉得 restful 的接口应该是无状态的,需要保存状态的是客户端。2L 说得对
    wtbhk
        4
    wtbhk  
       2014-06-17 23:48:53 +08:00
    @mytharcher 学到新姿势了
    serco
        5
    serco  
       2014-06-18 09:32:28 +08:00
    @mytharcher

    DELETE /user/:id # 删除id用户(注销)

    注销?那你怎么删除用户打算用什么?
    还是童鞋觉得注销就是删除的意思呢?
    bsbgong
        6
    bsbgong  
       2014-06-18 09:54:18 +08:00
    @serco
    这取决于你站点的设计
    一般来说,注销账户是PUT操作
    还有重新激活和彻底删除账户两个操作
    mytharcher
        7
    mytharcher  
       2014-06-18 14:53:10 +08:00   1
    @serco 你可以考虑“注册”跟“注销”这两个词的对应关系,我个人认为“注销”就是删除的意思,在这是比较恰当的,但是很多网站认为“注销”是登出的意思,我反而觉得用词不当。

    注销:取消登记在册(在案)的事项。比如注销一家公司,注销驾驶执照等。更相当于删除而不是登出,这样容易理解点了么。
    serco
        8
    serco  
       2014-06-18 19:54:05 +08:00
    @mytharcher

    我同意注销该是删除的意思,但是目前大家的普遍认知已经是退出登录的意思,包括某百科,所以我觉得还是不要再去使用注销作为删除的意思会比较好。
    refresh
        9
    refresh  
    OP
       2014-06-18 20:32:25 +08:00
    @serco

    通常我们在网站上的注销,应该是session的crud。按传统的做法,我们可能是用signin/signinup/singinout
    restful api的话,就是分成两个,session和user,再对应到具体的crud。

    put:session我觉得可以用用来做心跳。

    @mytharcher
    mytharcher
        10
    mytharcher  
       2014-06-18 22:57:33 +08:00   1
    @serco 的确普遍认知已经被错误的翻译教坏了,甚至刚看了眼Mac系统里的当前用户退出登录的翻译也是“注销”,记得XP里面也是。

    但我认为开发者有义务在涉及到的项目中提醒PM/UE去修正这个错误,而不是让这个错误的用法延续下去。所以我个人会在所有涉及的项目中都推行“登入”/“登出”这个翻译(甚至应该是“签入”/“签出”,类似签到),而基本不去用“注销”(大多数系统都没有删除账号的功能)。

    PS:注意到v2的退出登录文字是“登出”,赞一下!:P

    另外说到PATCH方法,其实应该在大多数情况下代替PUT,因为很多记录更新只是其中少数字段。不过大多数时候我们都很懒,总是更新所有的字段,不管用户是否修改了它。所以这点上接着用PUT也还凑合。

    记得关注TJ大神的GitHub动态时看到过一次 npm install methods 这个包的更新,最早只有上面帖子里的4个动词,而最新版增加了一堆,足足有25个,很多都没见过,够玩RESTful的同学们学一阵子的了。

    附链接: https://github.com/visionmedia/node-methods/blob/master/index.js
    yingluck
        11
    yingluck  
       2014-08-30 16:33:37 +08:00
    @mytharcher 现在的注册功能为了防机器人无意义注册,大都添加了邮箱激活或者短信验证,常常是填写邮箱密码后跳转到新地址,要求去邮箱中激活,那么注册页面还应该是 post /user 吗?我觉得应该放到邮箱激活链接中,但是这样一来就变成了get URL加参数。
    mytharcher
        12
    mytharcher  
       2014-08-30 23:36:17 +08:00   1
    @yingluck

    你可以考虑下当用户填写完注册信息提交的时候,实际上你经在数据库添加了一条记录,即使还需要邮箱激活等验证,也只是后续更新这条记录而已,所以对于“用户”这个资源的创建,依然是`POST /user`。

    为什么我没有提到任何“页面”这个字眼,因为把这和RESTful API联系在一起有时候是矛盾的,因为对于单纯浏览器展示的页面来说,其实每次都应该是GET,只是获取嘛。但是只从RESTful为什么要跟API连在一起,实际上就是更偏重API的方式,而response的content-type不一定总是text/html。从这个角度来考虑的话,RESTful的API更适合使用单页式的重Javascript来开发全站Ajax应用,因为数据的交互都通过API调用完成了,不再有传统意义的页面跳转,所以也就规避了页面和API都要RESTful的矛盾。

    所以如果你一定要使用纯净的RESTful API设计模式,那最好暂时不要考虑搜索引擎抓取了。

    以上均为个人理解,如有疏漏还请指出。
    yingluck
        13
    yingluck  
       2014-08-31 09:23:29 +08:00
    @mytharcher 说的很有道理,已感谢
    kyyych
        14
    kyyych  
       2015-07-30 16:40:00 +08:00
    忘记密码, 获取短信验证码应该如何设计呢? 放在哪个资源下比较好?
    refresh
        15
    refresh  
    OP
       2015-07-30 18:47:27 +08:00   1
    @kyyych

    post/get member/forgot-password
    get/post member/validate-sms

    供参考

    @mytharcher
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4317 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 04:04 PVG 12:04 LAX 20:04 JFK 23:04
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86