Задать вопрос

Ужесточать или смягчать правила валидации данных?

Поделитесь мнением/опытом - как, на ваш взгляд, правильнее поступать?

Приходят данные от пользователя на сервер (пусть он будет на, к примеру, Yii2). Применяются правила валидации, затем сохраняем их в БД. Как ужесточать условия проверки данных - от фреймворка к БД (т.е. фреймворк должен быть более дотошным) или наоборот?

К примеру, получаем некое item_id
- сначала удостоверяемся, что это целое положительное число
- затем проверяем, что этот самый item_id есть в таблице items
- ...
- сохраняем в БД

или же
- только удостоверяемся, что item_id != null
- сохраняем в БД, при этом поле (при создании таблицы) задаем как INTEGER UNIQUE

В первом случае ловим ошибки еще на подлете, во втором - уже по факту (exception-ами)

Вопрос, возможно, из серии вкуса фломастеров, но вдруг есть какие-то серьезные аргументы в пользу первого или второго подхода.
  • Вопрос задан
  • 104 просмотра
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Есть чёткая логика для этой ситуации:
1. На фреймворке лишь проверяем тип данных:
item_id - целое положительное?
1.1 Да - значит передаём в шаблон формирования запроса к БД
1.2 Нет - генерируем ошибку фреймворку, как невалидность входных данных пользователя.
2. на существование - проверяет запрос сохранения в базе через WHERE, таким образом - один запрос, вместо двух и проверку - мы отдаём базе и ловим код выполнения запроса.
Если запрос добавления в базу не был успешным:
2.1 либо запрашиваем детальную информацию об ошибке,
2.2 либо НЕ запрашиваем и сразу генерируем ошибку добавления фреймворку.

Шпаргалка выглядит так:
1. Валидируем данные перед их непосредственным использованием.
2. Если принимающая сторона (модуль системы) делает валидацию без последствий для безопасности и с сохранением логики необходимой обработки - всегда отдаём валидацию на принимающую сторону (в данном примере - это сервер БД).
Ответ написан
Комментировать
AxianLTD
@AxianLTD
ИМХО Зависит в том числе и от того, будете ли выдавать ошибку или нет и насколько подробную
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы