Wie gehe ich mit der Ressourcenvalidierung in REST-Webservices um?

Ich erstelle einen REST-Webservice in Java mit Spring, Jersey und Hibernate (JPA).

Jetzt versuche ich, Unterstützung für die Validierung in meine Ressourcen aufzunehmen. JSR-303 (Bean-Validierung) erschien natürlich als geeignete Wahl (ich verwende den Hibernate Validator, der die Referenzimplementierung von JSR-303 ist). Ich versuche jedoch, zuerst einige Konzepte zu konsolidieren.

Es scheint mir, dass es mindestens zwei Arten von möglichen Validierungen gibt:

Regelmäßige Überprüfung der Felder, z.B. Stellen Sie sicher, dass eine Eigenschaft nicht null ist, und prüfen Sie, ob aString Eigenschaft ist eine gültige E-Mail, überprüfen Sie, ob einInteger Eigentum ist größer als10usw. Dies funktioniert wie erwartet. Ich habe einen JAX-RS ExceptionMapper registriert, der zuordnetjavax.validation.ConstraintViolationExceptionsteht auf richtige HTTP Antworten.Validierung der Datenintegrität

Ich erkläre anhand eines Beispiels, was ich unter "Datenintegritätsvalidierung" genau verstehe. Dies ist der Fall, wenn zwischen zwei oder mehr Ressourcen Beziehungen bestehen. Stellen Sie sich zwei Ressourcen vor: aProduct und einCategory. EINProduct hat a Category. Wenn der Client die Darstellung derProduct Zum Erstellen (einer POST-HTTP-Anforderung) muss es denCategory des Produkts. Der Kunde muss die Kategorien natürlich vorher kennen. Stellen Sie sich in JSON Folgendes vor:

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

Nun, die Kategorie mit der ID123 existiert möglicherweise nicht. Wenn wir versuchen, dies in die Datenbank einzufügen, erhalten wir offensichtlich eine fremdschlüsselbezogene Ausnahme. Daher gehe ich davon aus, dass wir diese Probleme überprüfen und eine ordnungsgemäße Nachricht an den Client zurücksenden müssen, genau wie bei regulären Eigenschaftsüberprüfungen.

Jetzt sind meine Hauptfragen:

Im Moment führe ich die Validierung in der Datenzugriffsebene durch die Integration von JPA in Bean Validation durch. Sollten die Validierungen durchgeführt werdenVor / nach Serialisierungsprozessen, vor / nach Datenbankoperationen oderbeide?Wie verwendet manValidierung der Datenintegrität? Manuell? Oder sollten wir einfach versuchen, es trotzdem einzufügen und dann Datenbank- (oder DAO-) Ausnahmen abfangen? Bean Validation hat nichts mit dieser Art von Validierung zu tun, oder?Wenn Sie Erfahrung mit JAX-RS / REST und Bean Validation haben, würde ich mich freuen, wenn Sie es mich wissen lassen. Gruppen benutzen?

Diese Fragen haben etwas mit Java zu tun, aber ich hatte auch gehofft, einige neue Perspektiven auf diese Fragen zu bekommen. Einige technologieunabhängige. :) Es wäre großartig, wenn Sie Ihre eigenen Lösungen für diese Probleme auf Ihren REST-Webservices bereitstellen könnten.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage