以前在上学的时候留下个场馆预订的坑项目,毕业后师弟接手,老师让给加上手机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}
大家一般是怎么做这种权限控制的呢?
1
Dongdong36 2015-02-26 21:41:18 +08:00
个人感觉,尽量保持API的简洁比较好,一个API只做一件事情,保证逻辑代码的清晰,简洁
权限控制,这个应该是中间件的工作,判断用户是否具有使用API的权限 |
2
Dongdong36 2015-02-26 21:41:55 +08:00
以上个人感觉,如有不当请路过的大神指正,Thx
|
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 接口时的习惯,也请路过大牛指正。 |
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/ |
5
heaton_nobu 2015-02-27 09:33:12 +08:00
之前我也问过类似的问题,很多大神给的答案是将用户对应的权限放入缓存中
url中不用包含{userID},因为操作的肯定是当前登录用户,用户的标识放在cookie中就可以了 |