Как спроектировать индивидуальные дроссели для пользователей и таблиц в FastAPI

Как спроектировать индивидуальные дроссели для пользователей и таблиц в FastAPI

8 февраля 2023 г.

Разработка программного обеспечения проще, чем мы думаем, потому что иногда ответы бывают простыми и много раз прямо перед нашими глазами.

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

Если вы читали какие-либо из моих предыдущих работ, то знаете, что источником моего бэкенда является Django (и его остальная структура), и я благодарен за его направление и его шаблоны проектирования, они позволили мне изменить колесо в соответствии с моим вариантом использования.

<цитата>

В детстве мой папа знал, что мой разум задавался вопросом, и я хотел создавать что-то новое, и мой папа всегда говорил мне, что нельзя заново изобретать велосипед, модифицировать его.

Однажды я работал над приложением или конечной точкой с дросселированием/ограничением скорости с DRF, и это было потрясающе, я узнал что-то новое и был заинтригован (в начале своей карьеры). Дроссель в этом случае затронул конечные точки, к которым я его применил, недавно мне было интересно сделать что-то подобное в FastAPI, и я сначала пошел по простому пути (google для победы) и увидел, что существуют пакеты, которые выполняют действие дросселя. .

Я лично чувствовал, что они обеспечивают тот же комфорт и знакомство, что и при использовании Django. Они не предлагали той гибкости, которую я хотел (или, может быть, мне было лень делать некоторые переопределения), поэтому я тогда сел и разработал решение. Итак, давайте посмотрим на код.

Отказ от ответственности: я не буду предоставлять информацию о том, как приступить к работе с FastAPI, и много делать, чтобы ускориться. Я предполагаю, что вы можете это сделать, если вы не можете проверить лучшие ресурсы по началу работы с FastAPI (< a href="https://youtu.be/0sOvCWFmrtA">Видеоруководство, Документальное руководство)

Демонстрационное приложение: транзактируйте какое-нибудь приложение Fintechy (голые кости).

Many moving parts are held by an entry point the server.

Итак, давайте создадим таблицу с именем Tranzact, которую можно использовать для создания записей данных Tranzact, и будет сгенерирован API-ключ, позволяющий идентифицировать отдельные записи Tranzact.

Эта таблица и приложение используют SQLAlchemy, поэтому ознакомьтесь с документацией.

tranzact table, this ideally lives in the models.py file.

Вот роутер.

API router where routes for tranzact lives. Ideally lives in your router.py file.

Мы можем выполнять операции CRUDy в маршрутизаторе (если приложение выглядит странно, я сделаю еще один пост о шаблоне проектирования, который называется шаблоном проектирования репозитория).

Это конечная точка, к которой обращается API-ключ. Этот ключ API служит аутентификацией для выполнения некоторых действий. Мы видим, что существует зависимость, указывающая на запись транзакции.

a route that requires an API key for communication.

Давайте изучим зависимость tranzact_header и проверим вызовы.

a function that checks for the API-Key sent as a Request Header and returns a single tranzact record.

Это распознает API_Key и возвращает запись транзакции, связанную с API_key.

Поэтому, чтобы решить проблему индивидуального регулирования, я решил ее, создав запись для таблицы транзакций. Я создаю запись с tranzact.id и счетчиком по умолчанию, равным 0, в таблицу ограничения скорости транзакций. Вот таблица ниже.

a snippet of the Rate Limit table, and the tranzact models.

Таким образом, с этим решением мне понадобился способ отслеживать запись ограничения скорости, с помощью API_KEY мы можем увеличивать инкрементное количество на основе каждого вызова и регулировать на основе роли freemium, которую имеет запись транзакции. Вот как выглядит функция.

Таким образом, с помощью этой функции мы можем выполнить QA и проверить на основе флага и подсчета. Это зависит от функции api_header. Затем мы заменяем зависимость в конечных точках вызовов API функцией ограничения скорости API. Мы можем это сделать, потому что они оба возвращают одну и ту же запись Tranzact. Чтобы узнать больше о зависимостях и их вызове с помощью FastAPI, ознакомьтесь с этим пунктом документации.

Вот тестовый пример в моем почтальоне.

Настройка API_KEY для моей коллекции в почтальоне.

Setting the idea API Key in postman at a collection level.

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

throttled API response for API calls.

Итак, вот как я создал единый дроссель записи БД, заключительный этап моей реализации включает в себя использование задания celery beat job (запланированное задание/задача), чтобы сбросить все количество записей ограничения скорости транзакций до нуля в течение часа. Это личная реализация, которую могут сделать другие.

В заключение примите мои слова ниже с легким теплом сердца, но это моя правда.

Мы можем создать любой продукт/функцию, который вы видите, представляете или концептуализируете, независимо от его сложности. Как только мы его увидим, FastAPI поможет нам воплотить его в жизнь.

Также опубликовано здесь


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE