FastAPI Framework

Основы 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.

Навигация