Какой стек технологий используется, включая Python и FastAPI
Что проверяют
Знаете ли вы экосистему вокруг FastAPI глубже его стартовой страницы: как устроены зависимости, сессии базы, авторизация и тесты. Следом обычно спрашивают, как вы работаете с базой в асинхронном приложении и что будет, если внутри эндпоинта вызвать блокирующий код.
Как отвечать
Покажите стек как связанное целое:
- ядро: FastAPI поверх Starlette, валидация и сериализация на Pydantic v2, настройки через
pydantic-settingsиз переменных окружения; - сервер: Uvicorn, в проде несколько воркеров или несколько подов в Kubernetes;
- база: PostgreSQL, SQLAlchemy 2.0 в асинхронном режиме с драйвером
asyncpg, миграции Alembic. Сессия создаётся на запрос через зависимость сyieldи закрывается после ответа; - зависимости:
Dependsдля сессии, текущего пользователя и проверки прав, поэтому в тестах их легко подменить черезapp.dependency_overrides; - авторизация:
OAuth2PasswordBearerи JWT, подписанный через PyJWT, либо проверка токенов внешнего провайдера вроде Keycloak; - жизненный цикл: подключения к базе и брокеру открываются в
lifespan, декораторon_eventустарел; - фон:
BackgroundTasksдля лёгких действий после ответа, тяжёлое уходит в Celery или Taskiq; - тесты: pytest,
TestClientилиhttpx.AsyncClientсASGITransportдля асинхронных тестов, тестовая база в контейнере.
Сверху Docker, метрики Prometheus и трейсинг OpenTelemetry, у которого есть готовая инструментация для FastAPI. Назовите версии своих библиотек и одну проблему, которую решали, например утечку соединений или медленный эндпоинт.
Где спотыкаются
Вызывают блокирующий код в async def. Обычные def-эндпоинты FastAPI запускает в пуле потоков, а async def выполняет прямо в event loop, поэтому один синхронный запрос к базе тормозит все остальные.
Пишут на синтаксисе Pydantic v1: orm_mode, .dict(), @validator. В v2 это from_attributes, model_dump() и @field_validator.
Держат одну глобальную сессию SQLAlchemy на всё приложение. При конкурентных запросах это даёт перемешанные транзакции и трудноуловимые ошибки.