Jak obsługiwać sprawdzanie poprawności zasobów w usługach internetowych REST?
Buduję serwis WWW REST w Javie przy użyciu Spring, Jersey i Hibernate (JPA).
Teraz próbuję dodać obsługę sprawdzania poprawności w moich zasobach. JSR-303 (walidacja Bean) naturalnie pojawił się jako odpowiedni wybór (używam Hibernate Validator, który jest implementacją referencyjną JSR-303). Jednak staram się najpierw skonsolidować niektóre koncepcje.
Wydaje mi się, że istnieją co najmniej dwa rodzaje możliwych walidacji:
Regularna walidacja na polach, np. sprawdź, czy właściwość nie jest null, sprawdź, czy aString
właściwość jest ważnym adresem e-mail, sprawdź, czyInteger
właściwość jest większa niż10
itd. Działa to zgodnie z oczekiwaniami. Zarejestrowałem program JAX-RS ExceptionMapper, który mapujejavax.validation.ConstraintViolationException
jest w odpowiednich odpowiedziach HTTP.Walidacja integralności danychWyjaśnię dokładnie, co mam na myśli, podając „Walidacja integralności danych”. Dzieje się tak, gdy istnieją relacje między dwoma lub większą liczbą zasobów. Wyobraź sobie dwa zasoby: aProduct
i aCategory
. ZAProduct
ma a Category
. Gdy klient wysyła do serwera reprezentacjęProduct
aby utworzyć (żądanie POST HTTP), musi poinformowaćCategory
produktu. Oczywiście klient musi znać kategorie. Wyobraź sobie w JSON coś takiego:
{
"quantity": "10",
"state": "PRODUCED",
"category": {
"id": "123"
}
}
Cóż, kategoria z id123
może nie istnieć. Jeśli spróbujemy wstawić to do bazy danych, oczywiście otrzymamy wyjątek związany z kluczem obcym. Zakładam więc, że musimy zweryfikować te problemy i zwrócić odpowiedni komunikat do klienta, tak jak w przypadku regularnych walidacji właściwości.
Moje główne pytania to:
W tej chwili przeprowadzam walidację na poziomie dostępu do danych poprzez integrację JPA z walidacją Bean. Czy zatwierdzenia powinny być wykonaneprzed / po procesach serializacji, przed / po operacjach na bazie danych lubobie?Jak sobie poradzić zWalidacja integralności danych? Ręcznie? (tzn. jawnie konsultuje się z bazą danych sprawdzając integralność danych). A może powinniśmy po prostu spróbować ją wstawić, a następnie wyłapać wyjątki bazy danych (lub DAO)? Walidacja fasoli nie ma nic wspólnego z tego rodzaju walidacją, prawda?Jeśli masz jakiekolwiek doświadczenie z JAX-RS / REST i Bean Validation, byłbym zadowolony, gdybyś mnie o tym poinformował. Korzystasz z grup?Pytania te są w pewnym stopniu związane z Javą, ale miałem również nadzieję na uzyskanie nowych perspektyw w tych sprawach. Niektóre niezależne od technologii. :) Byłoby wspaniale, gdybyś mógł dostarczyć własne rozwiązania tych problemów na swoich serwisach REST.