JSON, валидация, ошибки, rate limits и вложенные структуры
Тема дорожной карты · Python Programming
Когда код общается с реальным API, «получили 200, распарсили JSON» уже мало. Нужны типизированные схемы (Pydantic-модели или dataclass с валидаторами), обработка ошибок с ретраями на 429/5xx, уважение к заголовкам Retry-After и rate-limit, аккуратный обход глубоко вложенных payload-ов (pydantic, jmespath, цепочки .get). На практике: валидируй на границе, падай быстро при плохих данных, логируй request id из ответа, никогда не доверяй строковым полям без проверки длины/формата. Pydantic v2 достаточно быстр, чтобы использовать его везде, в том числе в hot path.
Как это работает
JSON, валидация, ошибки, rate limits и вложенные структуры в Python — это FastAPI (async, типизированный, OpenAPI-first), Flask (sync, минималистичный, большая экосистема) и Django (batteries-included, ORM, admin). requests — де факто sync HTTP-клиент; httpx — его async-преемник. Pydantic — рантайм-валидация данных из type hints, на нём строятся request/response модели FastAPI. SQLAlchemy — универсальный ORM (1.x classic или 2.0 typed); Alembic — миграции схемы.
Когда применять
FastAPI — для новых async API с автогенерированными доками и Pydantic-валидацией; Flask — для крохотных сервисов или когда команда знает Flask наизусть; Django — когда нужны admin + ORM + auth из коробки (CMS-like, внутренние тулы). requests — для разовых скриптов, httpx — когда приложение async. SQLAlchemy — когда SQL уходит за тривиальный CRUD; для разовой аналитики raw SQL через sqlite3/psycopg часто понятнее.
Типичные ошибки
Ловушки JSON, валидация, ошибки, rate limits и вложенные структуры: блокирующие вызовы внутри async-эндпойнтов FastAPI (используйте httpx, не requests); деплой Flask на dev-сервере в production (нужны gunicorn/uvicorn + reverse proxy); чрезмерная вера в Pydantic на performance-critical путях (валидация стоит — модели делайте худыми); lazy loading SQLAlchemy триггерит N+1 запросы (.options(joinedload(...)) или eager loading); коммит секретов в settings.py (используйте переменные окружения).
Связанные понятия
Полезные ресурсы
Проверить знания (1)
Загрузка вопросов…