TGViewer
Backend Portal | Программирование Backend Portal | Программирование @backendportal · 16.1K subscribers
Post #3649 1.02K
Backend Checklist — День 14: Schema Validation

Ваш endpoint получает age из request body и прибавляет к нему 1. Месяцами всё работает нормально. А затем client отправляет age как "twenty", и необработанный TypeError приводит к ошибке где-то глубоко внутри приложения — далеко от handler, который изначально получил request.

Валидируйте данные на входе, а не внутри business logic.

Request body — это недоверенные входные данные. Schema явно определяет, что именно принимает приложение: названия полей, типы данных, ограничения и обязательные значения.

Валидные данные попадают в приложение как проверенный, строго типизированный object. Невалидные сразу отклоняются на HTTP boundary с 422 Unprocessable Content или 400 Bad Request.

Без schema каждой downstream function приходится самостоятельно перепроверять входные данные. И первая функция, которая забудет это сделать, может стать причиной следующего production incident.

Есть два важных поведения, о которых стоит знать при работе с Pydantic или serializers вашего framework.

Первое — coercion. По умолчанию "123" может превратиться в 123: строка незаметно преобразуется в объявленный тип. Это удобно, но может скрыть ошибку client, который отправляет данные неправильного типа. Strict mode отключает такое поведение.

Второе — extra fields. Необъявленное поле может быть молча отброшено без ошибки. Например, если отправить is_admin в schema, где такого поля нет, оно просто исчезнет. Но если raw input затем попадёт напрямую в model, принятие лишних полей может стать уязвимостью. Настройка extra='forbid' позволяет отклонять такие данные.

Парсите и валидируйте данные один раз на входе, чтобы core logic работала только с теми структурами данных, для которых она была создана.

👉 @BackendPortal
More from @backendportal
  1. Sep 25, 2026Оффер в IT за 3 дня - да! Вот такой крутой кейс получился у команды ИИ-ассистента Софи🤘 П…
  2. Sep 25, 2026Правильный ответ: Главная проблема не в try/catch, а в том, что err.message возвращается н…
  3. Sep 24, 2026Вопрос с собеседования по бэкенду В этом коде есть серьёзная уязвимость. На первый взгляд…
  4. Sep 24, 202699% путаницы между Inbound и Outbound исчезает, если перестать думать об инструментах и на…
  5. Sep 24, 2026Как AI становится чем-то большим, чем дефолтным ускорителем отдельных операцией Уже сейчас…
  6. Sep 24, 2026Вы создали composite index: (first_name, last_name, city) А затем выполнили запрос: SELECT…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →