Основы FastAPI
4 вопросовАвтоматическая генерация OpenAPI docs (Swagger/Redoc), типизация с Pydantic, асинхронность из коробки, автодокументация по типам.
Pydantic — библиотека валидации данных через типовые аннотации. FastAPI использует её для автоматической валидации запросов/ответов и генерации схем.
APIRouter — модуль для группировки роутов (по версиям API, модулям). FastAPI() — основной класс приложения со всем middleware и монтированием.
api_router = APIRouter()
api_router.get('/users')
app.include_router(api_router, prefix='/v1')
Зависимости объявляются как параметры функций. FastAPI автоматически вызывает их и передает результат в роут. Поддерживает кэширование (@cache), состояния, DB сессии.
Асинхронность
3 вопросовasync def — для I/O операций (DB, Redis, внешние API). def — для CPU-bound задач или когда нет await внутри.
BackgroundTasks — легкие задачи внутри HTTP запроса (уведомления). Celery — тяжелые фоновые задачи с очередями и воркерами.
StreamingResponse позволяет отправлять данные частями (SSE, файлы, генераторы). Полезно для больших файлов или real-time данных.
return StreamingResponse(iterable, media_type='text/plain')
Middleware и безопасность
4 вопросовCORSMiddleware с настройками origins, methods, headers. По умолчанию разрешает все — небезопасно для продакшена.
app.add_middleware(CORSMiddleware, allow_origins=['*'], allow_methods=['*'])
Использовать slowapi (на Redis) или slowapi_limiter. Декоратор @limiter.limit('5/minute') на роутах.
Декоратор @app.middleware('http') с доступом к Request/Response через call_next(request).
@app.middleware('http')
async def log_requests(request: Request, call_next):
response = await call_next(request)
Использовать OAuth2PasswordBearer из fastapi.security. Dependencies проверяют token в заголовке Authorization.
Pydantic модели
3 вопросовBaseModel — базовый класс для моделей. Field() задает дополнительные параметры (default, description, примеры, валидаторы).
class User(BaseModel):
name: str = Field(..., description='Full name')
Конфигурация модели: from_attributes=True (Pydantic v2), json_encoders, validation_alias и др.
class Config:
from_attributes = True
Pydantic модель для ответа. FastAPI автоматически сериализует в JSON и генерирует схему в OpenAPI.
Базы данных и ORM
3 вопросовСоздать engine, SessionLocal. Dependencies для DB сессий: Depends(get_db). Alembic для миграций.
Гибрид SQLAlchemy + Pydantic от создателя FastAPI. Модели работают как Pydantic и как SQLAlchemy одновременно.
Использовать joinedload(), selectinload() в SQLAlchemy или prefetch в SQLModel. select().offset().limit() вместо ORM для чтения.
Деплой и продакшен
4 вопросовUvicorn — ASGI сервер. Gunicorn управляет процессами, Uvicorn workers — многопроцессность (--workers 4).
Добавить prometheus-fastapi-instrumentator или prometheus-client. Роут /metrics с Counter/Gauge/Histogram.
src/ (app/, core/, crud/, schemas/, models/), tests/, docker-compose.yml, .env, requirements/, Dockerfile.
Эндпоинты /health, /ready с проверкой DB, Redis, внешних сервисов. Возвращать 200 только если всё OK.
Продвинутые темы
3 вопросовWebSocket и WebSocketDisconnect. ConnectionManager для управления активными соединениями.
FastAPI-Ariadne или Strawberry для GraphQL. REST проще для CRUD, GraphQL — для сложных запросов с фильтрацией.
from fastapi.testclient import TestClient. client = TestClient(app). Полное тестирование с моками DB/Redis.