2016-03-31 4 views
0

Ich verwende Katharsis-Bibliothek in meinem Spring Boot-Server, um automatisch JSON-API-Schnittstelle zu erstellen.Katharsis Json Api beschränken PATCH

Angenommen, ich habe einen Endpunkt (Ressource)/Ressource, für den ich die POST-Methode anbieten möchte (um neue Ressourcen zu erstellen), aber PATCH einschränken (um die Ressourcenaktualisierung einzuschränken). Inzwischen bietet das io.katharsis.repository.ResourceRepository nur die Methode save(), die sowohl für POST als auch für PATCH gilt.

Meine einzige Idee ist im Moment, FilterChain einen weiteren Filter hinzuzufügen, der das PATCHing des erforderlichen Endpunkts verhindert.

Gibt es bessere (d. H. Kürzere oder elegantere) Möglichkeiten, dies zu erreichen?

Antwort

0

Um PATCH Methode zu deaktivieren, sollten Sie die folgenden Schritte folgen:

  1. Überprüfen Sie, ob in der Datenbank in angeforderte URL bereitgestellte Objekt mit ID existiert
  2. Wenn Objekt vorhanden ist, werfen UnsupportedOperationException
+0

Danke für den Hinweis! Ist das der Weg, den JsonApi irgendwie empfiehlt? Mein Zweifel ist: Warum sollte ich überhaupt die Datenbank fragen? Ich weiß, dass PATCH überhaupt nicht unterstützt wird, unabhängig davon, was in der Datenbank enthalten ist. Es klingt also wie ein zusätzlicher Datenbank-Aufruf, der übersprungen werden kann, oder? Nachdem ich meine Frage noch einmal gelesen habe - vielleicht ist es nicht klar genug, werde ich es korrigieren. – ppi

+0

Auch ich würde mich sehr freuen, auch eine kurze Erklärung, warum diese Lösung besser ist als Filter hinzufügen. Danke im Voraus! – ppi

+0

Die Verwendung von Filter wäre besser geeignet, wenn Sie den Patch für alle Anfragen deaktivieren möchten, und ich nehme an, Sie wollen das nicht tun. Wenn man den ersten Schritt überspringt - in Produktionsbereitstellungsfällen mit großen Mengen von Transaktionen und Anfragen würde vermutlich nur der DB-Layer wissen, ob das Objekt tatsächlich bereits existiert. Es ist hauptsächlich für die Datenkonsistenz. – masterspambot

0

Ein Patch enthält eine ID.
So könnten Sie überprüfen, ob ID! = Null und stattdessen einen Fehler werfen.
Auf diesem Weg müssen Sie die Datenbank nicht überprüfen.
Bei dieser Lösung wird davon ausgegangen, dass Sie auf dem Client keine IDs generieren.

+0

Vielen Dank, schöne Idee. In unserer API ist es tatsächlich erlaubt, sowohl POST-Ressource/{ID} und PATCH-Ressource/{ID}. Also, wie Sie geschrieben haben, wird dies nicht funktionieren. Ehrlich gesagt, blieb ich bei der Filter (Übereinstimmung mit jeder PATCH/Ressourcenanforderung) -Lösung für eine avaid-Datenbankabfrage. – ppi