Я думаю, что это обычная проблема, но я не видел никаких хороших решений.Общая идея заключается в том, что я хочу полностью отделить проблемы частей вызова API.Прямо сейчас у меня есть:
# api.py
@flask.route('/api/data', methods=['GET'])
def data():
return flask.jsonify(do_business_logic())
# logic.py
def do_business_logic():
authorized = is_authorized_for_data(flask.request.headers['user-token'])
if not authorized:
return HTTPStatus.UNAUTHORIZED
data = get_data()
return data if data else HTTPStatus.NOT_FOUND
Это работает, но у меня есть HTTPStatus
в бизнес-логике.В идеале я бы поднял это до уровня api
.Это может быть придирчивым.Единственное реальное решение, которое я могу придумать, - это придумать замену этим значениям, таким как enum
, но это, кажется, добавляет ненужный уровень сложности.Я мог бы также выбросить исключения, но это, кажется, нарушает мышление «держать исключения исключительным».
Есть ли более распространенное решение или это считается идиоматическим?