Рубрики
Без рубрики

Колбу против JS движения

Защита ваших API против «неопределенных» ценностей. Теги с Python, колбой.

За последние пару месяцев я разрабатываю API с помощью колбы. За это время я заметил одно общее. Потребители API (по крайней мере, с теми, с которыми я работал), никогда не полностью проходил документацию, предоставленную, чтобы ознакомиться с тем, что необходимо. Теперь я не уверен, является ли это преднамеренным или случайным (нужна обратная связь 😄). Результаты испытания и ошибки разработчиками, потребляющими свои API, могут быть довольно раздражающими, особенно если у вас установлены услуги отчетности об ошибках, такие как сентиментальный .

Представьте, что просыпается до тонны электронных писем из вашей службы отчетности об ошибках, только чтобы выяснить, что это результат плохого ввода. Использование расширений колба, таких как Flask-Restplus Может помочь вам легко управлять плохим входом. Также Плохие запросы Исключения могут легко игнорироваться на службах отчетности об ошибках, чтобы все время не запускали оповещения. Однако есть переменные пути, которые вводят различную проблему. Посмотрите на следующий фрагмент:

@app.route('/')
def get_details(user_id):
.... # Do something with user_id

Вы создали конечную точку, которая выбирает детали пользователей из базы данных где-то и возвращает необходимые детали. Вы предоставили правильную документацию о использовании этой конечной точки, и вы вполне удовлетворены своей работой. Вы решите пойти на ранний обед, только чтобы вернуться довольно рано из-за того, что вы начали получать оповещения об ошибках, как только вы собираетесь иметь свой обед.

Вы быстро проверяете журналы и укладки, чтобы увидеть, что происходит. Все ошибки приходят с вашей недавно созданной конечной точки.

Как?

Вы уверены, что вы добавили все необходимые проверки. Вы даже добавили проверку типа на переменную пути для предотвращения недействительных типов.

Посмотрев ближе к следам стека, вы замечаете, что пройденный user_id был значением undefined Отказ Разработчик, потребляющий ваш API, был, вероятно, в страшных Пробный и ошибка Фаза, пытаясь проволочать вещи на фасоне.

Теперь добрый API должен быть защищен от неправильного использования. И да, это включает в себя пробные и ошибки действий по разработке Devs, потребляв ваш API.

Чтобы справиться с «неопределенными» переменными, вы, вероятно, могли бы добавить условный чек и вернуть соответствующий ответ.

@app.route('/')
def get_details(user_id):
    if user_id == 'undefined':
        raise BadRequest('Invalid user id')
    # Do something with user_id
....

Однако это решение не масштабируется хорошо. Что если у вас есть сотни конечных точек с переменными пути? Что тогда?

Лучшее решение было бы использование колбу до_request Декоратор, как так:

@app.before_request
def check_undefined_values():
    for variable in request.view_args.values():
        if variable == 'undefined':
            raise BadRequest('\'undefined\' value found.')

Этот подход работает лучше всего, поскольку check_undefined_values Функция всегда вызывается до пересылки запроса к вам конечная точка.

Я создал расширение колбы под названием Флэк-Антиэйс это использует вышеупомянутое. Он имеет дополнительные функциональные возможности, такие как возможность проверки неопределенных значений в полезных нагрузках и параметрах запроса. Это на самом деле мое первое расширение колба, так что проверьте его.

Это все на сегодня.

Оригинал: “https://dev.to/michaelbukachi/a-flask-anti-js-movement-h1”