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ż10itd. Działa to zgodnie z oczekiwaniami. Zarejestrowałem program JAX-RS ExceptionMapper, który mapujejavax.validation.ConstraintViolationExceptionjest w odpowiednich odpowiedziach HTTP.Walidacja integralności danych

Wyjaś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.

questionAnswers(4)

yourAnswerToTheQuestion