Как обрабатывать проверку ресурсов в веб-сервисах REST?
m создание веб-службы REST на Java с использованием Spring, Jersey и Hibernate (JPA).
Сейчас я'Я пытаюсь добавить поддержку проверки в моих ресурсах. JSR-303 (Bean validation) естественно появился как подходящий выбор (I 'используя Hibernate Validator, который является эталонной реализацией JSR-303). Однако я'Я пытаюсь объединить некоторые концепции в первую очередь.
Мне кажется, что есть как минимум два вида возможных проверок:
Регулярная проверка на поляхнапример, проверить, что свойство нет, проверьте, еслиString
свойство является действительным адресом электронной почты, проверьте, еслиInteger
свойство больше чем10
и т. д. Это работает, как ожидалось. Я'Мы зарегистрировали JAX-RS ExceptionMapper, который отображаетjavax.validation.ConstraintViolationException
в правильные ответы HTTP.Проверка целостности данных I 'объясню, что именно я имею в виду под "Проверка целостности данных " с примером. Это происходит, когда есть отношения между двумя или более ресурсами. Представьте себе два ресурса:Product
иCategory
,Product
имеетCategory
, Когда клиент отправляет на сервер представлениеProduct
чтобы создать (запрос POST HTTP), он должен сообщитьCategory
продукта. Конечно, клиент должен знать категории заранее. Вообразите в JSON что-то вроде:
{
"quantity": "10",
"state": "PRODUCED",
"category": {
"id": "123"
}
}
Ну, категория с идентификатором123
может не существовать Если мы попытаемся вставить это в базу данных, очевидно, мы получим исключение, связанное с внешним ключом. Поэтому я предполагаю, что мы должны проверить эти проблемы и вернуть правильное сообщение клиенту, как при обычной проверке свойств.
Теперь мои основные вопросы:
Прямо сейчас яm выполняет проверку на уровне доступа к данным через JPA 'Интеграция с Валидацией Бина. Должны ли быть сделаны проверкидо / после сериализации процессов,до / после операций с базой данных или жеи то и другое?Как обращатьсяПроверка целостности данных? Вручную? (то есть, явно консультируясь с базой данных, проверяя целостность данных) Или мы должны просто попытаться вставить ее в любом случае и затем перехватить исключения базы данных (или DAO)? Bean Validation не имеет ничего общего с такой проверкой, верно?Если у вас есть опыт работы с JAX-RS / REST и Bean Validation, я был бы рад, если бы вы сообщили мне об этом. Используя группы?Эти вопросы в некоторой степени связаны с Java, но я также надеялся получить новые взгляды на эти вопросы. Некоторые технологически независимые. :) Было бы здорово, если бы вы могли предоставить свои собственные решения этих проблем на своих веб-сервисах REST.