Flask-RESTful を使用して API を開発しており、アプリケーションには 3 つの役割があります。
- サイト管理者
- 部門_管理者
- 基本
特定のリソースについて、返される JSON オブジェクトには、各ロールに基づいた異なるキー セットがあります。
たとえば、「site_admin」として /orders をヒットすると、結果は次のようになります。
{
"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 をヒットすると、結果は次のようになります。
{
"orders": [
{"id": 3, "user": "meh", "paid": False}
]
}
/orders を「basic」としてヒットすると、次のような非常に最小限の JSON 応答になります。
{
"orders": [
{"id": 2, "paid": True}
]
}
これを実装するRESTfulな方法は何ですか?
3つの方法を思い付くことができます。
(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')
... どちらが RESTful な方法として好まれるかについてコンセンサスはありますか?
本当にありがとう!