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

2015-02-26 20:40:57 +08:00
 tohf

以前在上学的时候留下个场馆预订的坑项目,毕业后师弟接手,老师让给加上手机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}
大家一般是怎么做这种权限控制的呢?
4166 次点击
所在节点    问与答
5 条回复
Dongdong36
2015-02-26 21:41:18 +08:00
个人感觉,尽量保持API的简洁比较好,一个API只做一件事情,保证逻辑代码的清晰,简洁

权限控制,这个应该是中间件的工作,判断用户是否具有使用API的权限
Dongdong36
2015-02-26 21:41:55 +08:00
以上个人感觉,如有不当请路过的大神指正,Thx
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
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
2015-02-27 09:33:12 +08:00
之前我也问过类似的问题,很多大神给的答案是将用户对应的权限放入缓存中
url中不用包含{userID},因为操作的肯定是当前登录用户,用户的标识放在cookie中就可以了

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

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

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

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

© 2021 V2EX