Как спроектировать индивидуальные дроссели для пользователей и таблиц в FastAPI
8 февраля 2023 г.Разработка программного обеспечения проще, чем мы думаем, потому что иногда ответы бывают простыми и много раз прямо перед нашими глазами.
FastAPI помог мне понять бэкэнд-инжиниринг и подумать о процессах и о том, как вещи могут и должны работать. Это интеллектуальный инструмент, однако он зависит исключительно от вашего творчества и вашего воображения. Вот предпосылка моего обобщения.
Если вы читали какие-либо из моих предыдущих работ, то знаете, что источником моего бэкенда является Django (и его остальная структура), и я благодарен за его направление и его шаблоны проектирования, они позволили мне изменить колесо в соответствии с моим вариантом использования.
<цитата>В детстве мой папа знал, что мой разум задавался вопросом, и я хотел создавать что-то новое, и мой папа всегда говорил мне, что нельзя заново изобретать велосипед, модифицировать его.
Однажды я работал над приложением или конечной точкой с дросселированием/ограничением скорости с DRF, и это было потрясающе, я узнал что-то новое и был заинтригован (в начале своей карьеры). Дроссель в этом случае затронул конечные точки, к которым я его применил, недавно мне было интересно сделать что-то подобное в FastAPI, и я сначала пошел по простому пути (google для победы) и увидел, что существуют пакеты, которые выполняют действие дросселя. .
Я лично чувствовал, что они обеспечивают тот же комфорт и знакомство, что и при использовании Django. Они не предлагали той гибкости, которую я хотел (или, может быть, мне было лень делать некоторые переопределения), поэтому я тогда сел и разработал решение. Итак, давайте посмотрим на код.
Отказ от ответственности: я не буду предоставлять информацию о том, как приступить к работе с FastAPI, и много делать, чтобы ускориться. Я предполагаю, что вы можете это сделать, если вы не можете проверить лучшие ресурсы по началу работы с FastAPI (< a href="https://youtu.be/0sOvCWFmrtA">Видеоруководство, Документальное руководство) р>
Демонстрационное приложение: транзактируйте какое-нибудь приложение Fintechy (голые кости).
Итак, давайте создадим таблицу с именем Tranzact, которую можно использовать для создания записей данных Tranzact, и будет сгенерирован API-ключ, позволяющий идентифицировать отдельные записи Tranzact.
Эта таблица и приложение используют SQLAlchemy, поэтому ознакомьтесь с документацией.
Вот роутер.
Мы можем выполнять операции CRUDy в маршрутизаторе (если приложение выглядит странно, я сделаю еще один пост о шаблоне проектирования, который называется шаблоном проектирования репозитория).
Это конечная точка, к которой обращается API-ключ. Этот ключ API служит аутентификацией для выполнения некоторых действий. Мы видим, что существует зависимость, указывающая на запись транзакции.
Давайте изучим зависимость tranzact_header и проверим вызовы.
Это распознает API_Key и возвращает запись транзакции, связанную с API_key.
Поэтому, чтобы решить проблему индивидуального регулирования, я решил ее, создав запись для таблицы транзакций. Я создаю запись с tranzact.id и счетчиком по умолчанию, равным 0, в таблицу ограничения скорости транзакций. Вот таблица ниже.
Таким образом, с этим решением мне понадобился способ отслеживать запись ограничения скорости, с помощью API_KEY мы можем увеличивать инкрементное количество на основе каждого вызова и регулировать на основе роли freemium, которую имеет запись транзакции. Вот как выглядит функция.
Таким образом, с помощью этой функции мы можем выполнить QA и проверить на основе флага и подсчета. Это зависит от функции api_header. Затем мы заменяем зависимость в конечных точках вызовов API функцией ограничения скорости API. Мы можем это сделать, потому что они оба возвращают одну и ту же запись Tranzact. Чтобы узнать больше о зависимостях и их вызове с помощью FastAPI, ознакомьтесь с этим пунктом документации.
Вот тестовый пример в моем почтальоне.
Настройка API_KEY для моей коллекции в почтальоне.
Ниже приведен отрегулированный ответ для вызова запроса, который достиг ограниченного числа, что означает, что другой ключ api_key будет реагировать по-другому, отказавшись от желаемого ответа, а также, если запись транзакции имеет премиум-класс, она обходит проверку дросселирования.
Итак, вот как я создал единый дроссель записи БД, заключительный этап моей реализации включает в себя использование задания celery beat job (запланированное задание/задача), чтобы сбросить все количество записей ограничения скорости транзакций до нуля в течение часа. Это личная реализация, которую могут сделать другие.
В заключение примите мои слова ниже с легким теплом сердца, но это моя правда.
Мы можем создать любой продукт/функцию, который вы видите, представляете или концептуализируете, независимо от его сложности. Как только мы его увидим, FastAPI поможет нам воплотить его в жизнь.
Также опубликовано здесь
Оригинал