Starlette ломают не маршруты, а мелкие ошибки вокруг ASGI
Starlette часто берут как «лёгкий слой» над ASGI, но в проде проблемы обычно не в фреймворке, а в обвязке. Если приложение внезапно ведёт себя странно, проверьте базовые вещи: middleware, порядок роутинга, работу с `BackgroundTask` и то, как вы отдаёте ответы.
Три места, где чаще всего прячется баг:
— middleware, который меняет `request.state` или заголовки не там, где нужно;
— конфликт маршрутов, когда более общий путь перехватывает более конкретный;
— фоновые задачи, которые делают тяжёлую работу и блокируют цикл событий.
Отдельно смотрите на async-границы. Если внутри handler’а вызывается синхронный код, Starlette не спасёт: запросы начнут копиться, а latency поползёт вверх. Для CPU-bound и блокирующих I/O выносите работу в очередь, thread pool или отдельный сервис. Для простых ответов держите handler коротким и предсказуемым.
Ещё одна типовая ошибка — смешивать ответственность роутов и бизнес-логики. В Starlette удобно быстро собрать прототип, но если handler начинает валидировать, ходить в БД, форматировать ответ и писать логи в одном месте, отлаживать это потом больно. Разносите слои сразу: роут, сервис, адаптер.
Если держать приложение коротким на уровне ASGI и не тащить блокировки в handler’ы, Starlette остаётся очень удобной основой для веба и скриптов.
Python Web & Scripts — Django, FastAPI, скрипты
@python_web_scripts
Starlette ломают не маршруты, а мелкие ошибки вокруг ASGI
Этот пост опубликован в Telegram-канале Python Web & Scripts — Django, FastAPI, скрипты. Подписаться можно по ссылке: @python_web_scripts.