我正在使用Flask-RESTful開發API,並且我的應用程序有三個角色。基於用戶角色RESTfully路由API
- site_admin
- department_admin
- 基本
對於任何給定的資源,JSON對象返回都有一套不同的基於每個角色的鍵。
例如,如果你打/訂單爲「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}
]
}
但是,如果你打/訂單爲「department_admin」,其結果可能是這樣的:
{
"orders": [
{"id": 3, "user": "meh", "paid": False}
]
}
如果你打/訂單爲 「基本」,它會是這樣一個很小的JSON響應:
{
"orders": [
{"id": 2, "paid": True}
]
}
實現這個的RESTful方式是什麼?
我可以想出三種方法。
(1)利用上一個請求Arg和過濾:
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?
非常感謝!
請注意,由於您使用了用戶會話,因此第二個選項不是真正的RESTful。 REST API不應該存儲任何客戶端狀態。相反,您應該要求客戶端驗證他們發送給您的每個請求。 – Miguel 2014-12-02 15:38:08
@Miguel很好的電話。那麼你對(1)和(3)之間的區別有什麼想法? – SeanPlusPlus 2014-12-02 20:44:32
我認爲(2)是最好的選擇,如果做得對。讓我在回答中提出這個問題。 – Miguel 2014-12-02 21:50:11