我正在使用 Flask-RESTful 开发 API,我的应用程序具有三个角色。
- 站点管理员
- 部门管理员
- 基本的
对于任何给定的资源,返回的 JSON 对象具有基于每个角色的不同键集。
例如,如果您将 /orders 设为“site_admin”,结果可能如下所示:
{
"orders": [
{"id": 1, "user": "foo", "paid": True, "department": "A", "code": 456},
{"id": 2, "user": "bar", "paid": False, "department": "A", "code": 567},
{"id": 3, "user": "meh", "paid": False, "department": "B", "code": 678}
]
}
但是,如果您将 /orders 设置为“department_admin”,结果可能如下所示:
{
"orders": [
{"id": 3, "user": "meh", "paid": False}
]
}
如果您将 /orders 设置为“基本”,它将是一个非常小的 JSON 响应,如下所示:
{
"orders": [
{"id": 2, "paid": True}
]
}
实现这一点的 RESTful 方式是什么?
我可以想出三种方法来做到这一点。
(1) 使用请求参数并对其进行过滤:
class Orders(restful.Resource):
def get(self):
if request.args['role'] == 'site_admin':
return admin_JSON_response()
elif request.args['role'] == 'department_admin':
return dept_admin_JSON_response()
else:
return basic_JSON_response()
api.add_resource(Orders, '/orders')
(2) 对会话对象进行过滤:
class Orders(restful.Resource):
def get(self):
if session['role'] == 'site_admin':
return admin_JSON_response()
elif session['role'] == 'department_admin':
return dept_admin_JSON_response()
else:
return basic_JSON_response()
api.add_resource(Orders, '/orders')
(3) 每个角色有不同的路线:
class OrdersSiteAdmin(restful.Resource):
def get(self):
return admin_JSON_response()
api.add_resource(OrdersSiteAdmin, '/orders_site_admin')
class OrdersDeptAdmin(restful.Resource):
def get(self):
return dept_admin_JSON_response()
api.add_resource(OrdersDeptAdmin, '/orders_dept_admin')
class OrdersBasic(restful.Resource):
def get(self):
return basic_JSON_response()
api.add_resource(OrdersBasic, '/orders_basic')
...是否就哪种方式是 RESTfully 的首选方式达成共识?
非常感谢!