Как обрабатывать проверку ресурсов в веб-сервисах REST?

Я создаю веб-сервис REST на Java, используя Spring, Jersey и Hibernate (JPA).

Сейчас я пытаюсь добавить поддержку проверки в моих ресурсах. JSR-303 (Bean validation) естественно появился как подходящий выбор (я использую Hibernate Validator, который является эталонной реализацией JSR-303). Однако сначала я пытаюсь закрепить некоторые концепции.

Мне кажется, что есть как минимум два вида возможных проверок:

Регулярная проверка на поляхнапример, проверьте, что свойство не является нулевым, проверьте, еслиString свойство является действительным адресом электронной почты, проверьте, еслиInteger свойство больше чем10и т. д. Это работает, как ожидалось. Я зарегистрировал JAX-RS ExceptionMapper, который отображаетjavax.validation.ConstraintViolationExceptionв правильные ответы HTTP.Проверка целостности данных

Я объясню, что именно я имею в виду под «проверкой целостности данных», на примере. Это происходит, когда есть отношения между двумя или более ресурсами. Представьте себе два ресурса:Product иCategory,Product имеет a Category, Когда клиент отправляет на сервер представлениеProduct чтобы создать (запрос POST HTTP), он должен сообщитьCategory продукта. Конечно, клиент должен знать категории заранее. Вообразите в JSON что-то вроде:

{
   "quantity": "10",
   "state": "PRODUCED",
   "category": {
      "id": "123"
   }
}

Ну, категория с идентификатором123 может не существовать Если мы попытаемся вставить это в базу данных, очевидно, мы получим исключение, связанное с внешним ключом. Поэтому я предполагаю, что мы должны проверить эти проблемы и вернуть правильное сообщение клиенту, как при обычной проверке свойств.

Теперь мои основные вопросы:

Сейчас я выполняю проверку на уровне доступа к данным через интеграцию JPA с Bean Validation. Должны ли быть сделаны проверкипроцессы до / после сериализации, до / после операций с базой данных или жеобе?Как обращатьсяПроверка целостности данных? Вручную? (то есть, явно консультируясь с базой данных, проверяя целостность данных) Или мы должны просто попытаться вставить ее в любом случае, а затем перехватить исключения базы данных (или DAO)? Bean Validation не имеет ничего общего с такой проверкой, верно?Если у вас есть опыт работы с JAX-RS / REST и Bean Validation, я буду рад, если вы сообщите мне. Используя группы?

Эти вопросы в некоторой степени связаны с Java, но я также надеялся получить новые взгляды на эти вопросы. Некоторые технологически независимые. :) Было бы здорово, если бы вы могли предоставить свои собственные решения этих проблем на своих веб-сервисах REST.

Ответы на вопрос(4)

Ваш ответ на вопрос