170 похожих чатов

Вопрос общего характера по бекенду: должен ли я валидировать и

защищать внутреннюю реализацию (сервисы и сущности) или только внешний интерфейс (контроллеры и дто?)

Представим такую ситуацию, у меня на проекте есть Entity и Dto. Первый я не валидирую никак, просто задаю тип данных - строка. Второй я очень жестко валидирую - принимать только строку с хешем алгоритма sha3-256

Представим другую ситуацию, у меня на проекте есть Service и Controller для ресайза изображений. Первый я не валидирую никак, он может, скажем, ресайзить картинку хоть до 400000000x400000000 (что будет крайне долго). Второй я жестко валидирую - если переданная пользователем ширина или высота больше 2000, то я троваю ошибку BadRequest.

Это ОК или нужно валидировать данные на уровне внутренней реализации, а не внешнего интерфейса? (тровать ошибки в сервисе, делать валидацию Entity при записи в БД [при том, что по типам БД оно проходит] и т.д)

13 ответов

37 просмотров

Entity должна делать все чтобы она не могла оказаться в невалидном состоянии относительно бизнес логики по идеи не нужно, поскольку это только больше в кашу прерварит твой код бизнес логики, смешав его с кодом проверки данных

по максимуму валидации на входных точках (контроллеры) и в самой бд (констрейнты)

Veli- Автор вопроса

не совсем понял, как будто бы второе предложение противоречит первому) Так Entity должна защищаться либо защита на уровне контроллера - это ок?

Veli- Автор вопроса

так вот проблема, что сама БД не имеет валидация типа «хочу хэш вот в этой вот колонке, а не просто строчку». Могу на уровне сервиса или репозитория это вручную предотвращать, но стоит ли?

имею ввиду что вот например в запросе POST /api/orders/status в контроллере статус "sent" - это валидное значение в теле запроса но сам энтити не может в нем оказаться, поскольку например заказ уже закрыт

простые ошибки валидации(тип, формат не тот) валидируешь в контроллере Все что сложнее(уникальность) валидируешь в сервисе Если я правильно понял вопрос

Veli- Автор вопроса

уникальность бд сама заблочит, так что тут можно даже не думать) Значит формат все-таки к контроллеру, я тоже к этому склоняюсь

Veli- Автор вопроса

хм, тоже интересный пример

имхо всё постороннее должно отваливаться еще на этапе middleware

если это то что-то, что должно отвалиться, требует проверки в бд или еще где то, это тоже мидлвара?

размер картинки?

Veli- Автор вопроса

это не размер картинки, это параметры, по которым я ресайзю картинку, если речь конкретно про мое уточнение)

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

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта