REST - umkehrbare DELETE

8

Ich habe eine Frage zu HTTP DELETE und REST. Ich habe eine Ressource x . Abhängig vom Status von x bewirkt das Löschen von x Folgendes:

  1. Löschen Sie x dauerhaft.
  2. Markieren Sie x als gelöscht. Dies bedeutet, dass x später wieder zurückgesetzt werden kann.

Ich nehme an, dass HTTP DELETE muss die Ressource gemäß den HTTP / REST-spezifischen löschen, anstatt sie als gelöscht zu markieren, zum Beispiel: GET auf x muss 404 zurückgeben nachdem das HTTP DELETE verarbeitet wurde. Dies bedeutet, dass HTTP DELETE nicht für die zweite Situation verwendet werden kann. Wie würden Sie dieses Löschverhalten (1 und 2) REST-konform modellieren?

Da einige Ressourcen zurückgesetzt werden können, sollte dies auch über die REST-API möglich sein. Wie würden Sie das Verhalten auf REST-basierende Weise modellieren?

Nehmen wir an, x befindet sich aus Gründen der Einfachheit in Ссылка .

    
Zure Citroen 20.07.2011, 13:15
quelle

3 Antworten

4

Sie könnten den Mülleimer-Ansatz verwenden.

%Vor%

bewirkt, dass x in den Papierkorb verschoben wird. An diesem Punkt konnte mit

zugegriffen werden %Vor%

und wenn Sie es wiederherstellen wollten, dann nehmen Sie die abgerufene Darstellung und tun

%Vor%

UPDATE:

Die Verwendung von Hypermedia macht es für den Kunden etwas offensichtlicher, was er tun soll.

%Vor%

Nachdem wir darüber nachgedacht haben, ist PUT wirklich die richtige Methode. Es ist unsicher, idempotent und Sie kennen den URI, wo Sie die Datei wiederherstellen können. Passt perfekt in die Semantik von PUT. Eine Alternative zu vielleicht.

    
Darrel Miller 20.07.2011 14:56
quelle
2

Sie verfügen über eine Ressource, die in mehreren Zuständen (aktiv, markiert_für_Deletion, gelöscht) mit Aktionen vorhanden sein kann, die die Ressource von einem Status in einen anderen versetzen. Dies ist die klassische Definition eines Zustandsautomaten . Für einen gegebenen Übergang stellen Sie sich die Frage: "Welches HTTP-Verb repräsentiert diesen spezifischen Übergang? Muss ich einen missbrauchen? Ist POST ein Catch-all? Kann ich mein eigenes erfinden?" Es gibt einen besseren Weg. Setzen Sie den Status direkt offen und verwenden Sie GET und PUT, um ihn zu ändern. Lassen Sie den Server herausfinden, wie er vom ehemaligen Staat in den neuen Staat gelangt. Zum Beispiel könnten Sie eine Ressource haben:

%Vor%

Sie möchten es so ändern, dass:

%Vor%

Sie könnten sich fragen, ob DELETE dafür oder für eine benutzerdefinierte Methode geeignet ist, oder Sie können einfach diesen neuen Zustand PUT setzen und fertig sein:

%Vor%     
fumanchu 20.07.2011 15:22
quelle
0

RESTful bedeutet, dass Sie POST verwenden können, um eine Löschung durchzuführen, wenn Sie möchten: Im Gegensatz zu SOAP-basierten Webdiensten gibt es keine " offizieller "Standard für RESTful Web Services.

In diesem Fall würde ich Ihre Markierung für Löschen zu einem POST ändern (es ist eigentlich ein Update und kein Löschen).

    
Jonathan 20.07.2011 13:31
quelle

Tags und Links