Как обрабатывать проверку ресурсов в веб-сервисах 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.