Вы делаете проверку входных параметров в классе ресурсов или классе обслуживания?
Я создаю веб-службу REST, URL-адрес которой указан ниже: /users/{userId}/images/{imageId}
Я должен был бы сделать следующие проверки, прежде чем я сделаю что-нибудь еще: 1. Подтвердите, что userId находится в правильном формате. Пример: целое число, а не строка и т.д. 2. Проверьте imageId в правильном формате. Пример: целое число, а не строка и т. Д. 3. Проверьте, существует ли в базе данных userId. 4. Проверьте, существует ли imageId в базе данных.
У меня есть два класса (на стороне сервера). Один класс - это класс "Ресурс", и этот класс получает первый вызов (элемент управления) из клиентского приложения. Затем этот класс отправляет входные данные в класс "Сервис". Класс обслуживания заботится о бизнес-логике.
Теперь, какой класс должен выполнить четыре проверки, упомянутые выше?
Вариант 1. Выполните проверки: "Проверка 1" (выше) и "Проверка 2" в классе "ресурс" и выполните "Проверка 3" и "Проверка 4" в классе "обслуживание".
Вариант 2. Выполните все проверки в классе "Сервис".
Какой вариант является ЛУЧШИМ подходом для проверки входных данных. Пожалуйста, дайте мне знать, какой вариант лучше.
2 ответа
Целью проверки является уменьшение функциональности вызова с неверными данными. Так что вариант 1 будет лучше. Если ID пользователя и изображения не в правильном формате, не вызывайте дальнейшие функции.
Я не согласен с ответом. Проверка должна происходить в классе обслуживания. Слой отдыха является одним из таких клиентов вашего уровня обслуживания. У вас может быть интерфейс Сервисного уровня, представленный как Java API, другой клиент, использующий уровень обмена сообщениями, такой как Rabbit Mq и т. Д. Результат проверки должен относиться ко всем. Другая важная причина,
- Код транзакции JDBC будет более атомарным. Представьте, у вас есть проверка, чтобы проверить, существует ли сущность, и затем действовать. Если это связано с базой данных, они должны быть выполнены в одной транзакции.
- Если в ваши правила проверки будут внесены изменения, это будет одно место для внесения изменений.
Ваш код отдыха должен иметь отображение ошибок / исключений на HTTP-коды. Ваш сервисный уровень должен быть полностью не осведомлен о протоколе HTTP