защищать внутреннюю реализацию (сервисы и сущности) или только внешний интерфейс (контроллеры и дто?)
Представим такую ситуацию, у меня на проекте есть Entity и Dto. Первый я не валидирую никак, просто задаю тип данных - строка. Второй я очень жестко валидирую - принимать только строку с хешем алгоритма sha3-256
Представим другую ситуацию, у меня на проекте есть Service и Controller для ресайза изображений. Первый я не валидирую никак, он может, скажем, ресайзить картинку хоть до 400000000x400000000 (что будет крайне долго). Второй я жестко валидирую - если переданная пользователем ширина или высота больше 2000, то я троваю ошибку BadRequest.
Это ОК или нужно валидировать данные на уровне внутренней реализации, а не внешнего интерфейса? (тровать ошибки в сервисе, делать валидацию Entity при записи в БД [при том, что по типам БД оно проходит] и т.д)
Entity должна делать все чтобы она не могла оказаться в невалидном состоянии относительно бизнес логики по идеи не нужно, поскольку это только больше в кашу прерварит твой код бизнес логики, смешав его с кодом проверки данных
по максимуму валидации на входных точках (контроллеры) и в самой бд (констрейнты)
не совсем понял, как будто бы второе предложение противоречит первому) Так Entity должна защищаться либо защита на уровне контроллера - это ок?
так вот проблема, что сама БД не имеет валидация типа «хочу хэш вот в этой вот колонке, а не просто строчку». Могу на уровне сервиса или репозитория это вручную предотвращать, но стоит ли?
имею ввиду что вот например в запросе POST /api/orders/status в контроллере статус "sent" - это валидное значение в теле запроса но сам энтити не может в нем оказаться, поскольку например заказ уже закрыт
простые ошибки валидации(тип, формат не тот) валидируешь в контроллере Все что сложнее(уникальность) валидируешь в сервисе Если я правильно понял вопрос
уникальность бд сама заблочит, так что тут можно даже не думать) Значит формат все-таки к контроллеру, я тоже к этому склоняюсь
хм, тоже интересный пример
имхо всё постороннее должно отваливаться еще на этапе middleware
если это то что-то, что должно отвалиться, требует проверки в бд или еще где то, это тоже мидлвара?
размер картинки?
это общий вопрос был
это не размер картинки, это параметры, по которым я ресайзю картинку, если речь конкретно про мое уточнение)
Обсуждают сегодня