Ошибка валидации¶
Ошибка валидации — это сообщение или состояние программной системы, возникающее при проверке (валидации) входных данных, если они не соответствуют заданным правилам, формату или ограничениям. Валидация выполняется на этапе ввода, передачи или обработки данных и служит для предотвращения некорректной информации в системе. Ошибка валидации не является сбоем самого приложения в строгом смысле: это штатный механизм обратной связи, сигнализирующий о несоответствии данных требованиям.
¶Область применения
Термин используется в нескольких смежных областях:
- Программирование и разработка ПО — проверка значений полей форм, параметров API, данных конфигураций.
- Базы данных — нарушение ограничений целостности (constraints): NOT NULL, UNIQUE, внешние ключи, типы данных.
- Веб-разработка — проверка введённых пользователем данных на клиенте (JavaScript) и на сервере.
- Электронный документооборот — несоответствие реквизитов документа установленным форматам.
- Промышленная автоматизация — некорректные значения телеметрии или управляющих команд.
¶Виды ошибок валидации
¶По месту обнаружения
| Тип | Описание |
|---|---|
| Клиентская (front-end) | Выполняется в браузере или приложении до отправки данных на сервер. Реализуется средствами JavaScript, HTML5-атрибутами (required, pattern, min, max). |
| Серверная (back-end) | Выполняется на сервере после получения данных. Считается более надёжной, так как клиентскую проверку можно обойти. |
¶По характеру нарушения
- Типовая ошибка — значение не соответствует ожидаемому типу (строка вместо числа, невалидный формат даты).
- Ошибка диапазона — число вне допустимых границ (отрицательный возраст, сумма превышает лимит).
- Ошибка формата — не соблюдён шаблон (некорректный email, номер телефона, ИНН, серия паспорта).
- Ошибка обязательного поля — не заполнено поле, помеченное как обязательное.
- Ошибка ссылочной целостности — ссылка на несуществующий объект (внешний ключ в БД).
- Ошибка бизнес-правила — данные формально корректны, но нарушают логику предметной области (дата окончания раньше даты начала).
¶Форматы представления ошибок
Системы валидации сообщают об ошибках в разных формах:
- Человекочитаемые сообщения — текст на естественном языке, адресованный конечному пользователю («Введите корректный адрес электронной почты»).
- Машиночитаемые коды — структурированные ответы API. Наиболее распространён формат RFC 9457 (Problem Details for HTTP APIs), описывающий ошибки валидации в REST-сервисах через JSON-объект с полями
type,title,status,detail,errors. - Журналируемые записи — сообщения для систем мониторинга и логирования.
¶Стандартные подходы к валидации
¶Валидация на основе схем
Для описания правил проверки используются схематические языки:
- JSON Schema — декларативное описание структуры и ограничений JSON-данных. Популярен в REST API.
- XML Schema (XSD) — валидация XML-документов.
- OpenAPI Specification — описание параметров и форматов запросов к API, включая правила валидации.
¶Библиотеки валидации
В разработке широко используются готовые решения:
- JavaScript/TypeScript: Joi, Yup, Zod, AJV (для JSON Schema), class-validator (для TypeScript-классов с декораторами).
- Python: Pydantic, Cerberus, Marshmallow, voluptuous.
- Java: Hibernate Validator, Jakarta Bean Validation.
- C#/.NET: встроенная система Data Annotations и FluentValidation.
- PHP: встроенная система валидации Laravel, Symfony Validator.
¶Декларативный подход
Современные фреймворки (Angular, React Hook Form, Formik) позволяют описывать правила валидации декларативно, отделяя логику проверки от бизнес-логики приложения.
¶Примеры ошибок валидации
Форма регистрации. Пользователь указал email user@ — сервер отвечает ошибкой валидации с HTTP-статусом 400 (Bad Request) и сообщением о некорректном формате адреса.
REST API. Запрос POST /api/orders с полем quantity: -5 отклоняется, если схема требует minimum: 1. Ответ содержит перечень нарушенных ограничений.
База данных. Попытка вставки записи с NULL в столбец, объявленный как NOT NULL, приводит к ошибке нарушения ограничения целостности (constraint violation).
Импорт данных. Загрузка CSV-файла с колонкой «Дата рождения» в формате 31.02.2020 — несуществующая дата — приводит к ошибке валидации строки.
¶Рекомендации по обработке
- Серверная валидация обязательна даже при наличии клиентской.
- Сообщения об ошибках должны быть конкретными и указывать на поле и причину.
- Валидация не должна раскрывать внутреннюю структуру системы (типы БД, имена таблиц).
- Правила валидации целесообразно централизовать, чтобы клиент и сервер проверяли данные одинаково.
- Ошибки валидации не следует путать с ошибками аутентификации и авторизации: первые касаются формы данных, вторые — прав доступа.
¶Источники
- RFC 9457 — Problem Details for HTTP APIs
- Спецификация JSON Schema (json-schema.org)
- OWASP Input Validation Cheat Sheet
- Документация библиотек Zod, Pydantic, Hibernate Validator
