Restful 的 API 的设计时的权限控制(资源抽象?)问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tohf
V2EX    问与答

Restful 的 API 的设计时的权限控制(资源抽象?)问题

  •   tohf 2015-02-26 20:40:57 +08:00 4496 次点击
    这是一个创建于 3955 天前的主题,其中的信息可能已经有所发展或是发生改变。

    以前在上学的时候留下个场馆预订的坑项目,毕业后师弟接手,老师让给加上手机APP。然后就想给改成RestfulAPI的, 顺便把页面也重构了。 们指导。
    在设计API的时候有这个情况,当时这么设计一个订单Order

    class Order { private String orderID; private String usreID; private String fieldsID; ... private OrderState orderState; ... ... } 
    其中 orderState代表订单状态,姑且有(为确认,已确认,已消费,过期)等 对于用户而言是无法修改订单状态的,可以修改预订内容,例如这么设计用户可用的, 

    新建订单 POST /api/orders/{userID}
    修改 PUT/PATCH /api/orders/{userID}/{orderID}
    获取 GET /api/orders/{userID}/{orderID}
    删除 DELETE /api/orders/{userID}/{orderID}

    对于场馆方面,前台需要在用户来消费时改变订单状态,即只能更改客户的一个字段。那这个API怎么设计? 是说同样使用 
    修改 PUT/PATCH /api/orders/{userID}/{orderID} 
    然后在代码里用逻辑进行判断。 还是说,增加新的API 
    PATCH /api/orders/state/{orderID} 
    大家一般是怎么做这种权限控制的呢? 
    5 条回复    2015-02-27 09:33:12 +08:00
    Dongdong36
        1
    Dongdong36  
       2015-02-26 21:41:18 +08:00
    个人感觉,尽量保持API的简洁比较好,一个API只做一件事情,保证逻辑代码的清晰,简洁

    权限控制,这个应该是中间件的工作,判断用户是否具有使用API的权限
    Dongdong36
        2
    Dongdong36  
       2015-02-26 21:41:55 +08:00
    以上个人感觉,如有不当请路过的大神指正,Thx
    special
        3
    special  
       2015-02-26 23:52:17 +08:00
    为什么要把 userID 加进 API 的 URL 呢? 新建、修改订单的 API,userID 都不是当前登录的用户么?

    另外,对于「消费」这个相对来说独立的动作,应该分配一个独立的 API 接口,这个 API 接口集中处理「消费」一系列的逻辑。

    ```
    PUT/PATCH /api/orders/{orderID}/pay
    ```

    修改订单某些简单属性,例如联系人电话什么的,可以用

    ```
    修改 PUT/PATCH /api/orders/{orderID}
    ```

    当然,这个只是小的在 Rails 设计 API 接口时的习惯,也请路过大牛指正。
    feelapi
        4
    feelapi  
       2015-02-26 23:52:34 +08:00
    我觉得是这样,不需要增加新的api和uri, API的每次调用都需要认证的,权限控制在服务器端做细化就可以了。
    http://limboy.me/tech/2010/11/14/rest.html
    http://www.weiguda.com/blog/22/
    heaton_nobu
        5
    heaton_nobu  
       2015-02-27 09:33:12 +08:00
    之前我也问过类似的问题,很多大神给的答案是将用户对应的权限放入缓存中
    url中不用包含{userID},因为操作的肯定是当前登录用户,用户的标识放在cookie中就可以了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5173 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 36ms UTC 07:44 PVG 15:44 LAX 23:44 JFK 02:44
    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