Как разделить уровни API и бизнес-логики в Flask / Python - PullRequest
0 голосов
/ 03 июня 2019

Я думаю, что это обычная проблема, но я не видел никаких хороших решений.Общая идея заключается в том, что я хочу полностью отделить проблемы частей вызова 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, но это, кажется, добавляет ненужный уровень сложности.Я мог бы также выбросить исключения, но это, кажется, нарушает мышление «держать исключения исключительным».

Есть ли более распространенное решение или это считается идиоматическим?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...