2012-05-24 18 views
7

Zum Beispiel, wenn ich GET aufrufen, um ein Element zu erhalten, löschen Sie es mit DELETE und holen Sie es erneut, wie sollte das zweite GET arbeiten?Umgang mit veralteten Daten in REST?

Ich meine, durch richtige Einhaltung der REST-Prinzipien, was ist der richtige Ansatz dabei, da GET im Cache gespeichert werden kann und alle? Was ist der Ansatz für die Behandlung veralteter Daten in REST?

+0

Wenn Sie nur den Artikel gelöscht haben, warum würden Sie versuchen, es wieder "zu bekommen"? Es wird nicht existieren. Vielleicht vermisse ich etwas oder die Frage war nicht klar. –

+0

@Brent Pabst: Betrachten Sie zum Beispiel Links in einer UI-Anwendung, wo das Löschen in einem Popup erfolgt, der GET-Link jedoch in der Eröffnungsseite ist und nicht aktualisiert oder per E-Mail übertragen wird und der Benutzer sie direkt in die Adresszeile des Browsers einfügt das löschen usw. Das unterliegt Cache! Die Idee ist, wenn der Artikel nicht mehr da ist, wie sollte das GET funktionieren. Deaktivieren Sie den gesamten Cache? Ist es akzeptabel, einen Cache zu haben? Was ist der REST-Ansatz für all das? – JohnDoDo

+2

Das zweite GET würde natürlich den HTTP-Code '404 Not Found' zurückgeben. Caching ist eine ganz andere Sache, für die ich die wunderbar undurchsichtige Antwort liefern werde: "Es kommt darauf an". Aber wenn es ein zweites GET gibt, scheint es ziemlich offensichtlich, dass es einen 404 erzeugen würde? –

Antwort

4

Zunächst hängt das Verhalten davon ab, was der DELETE-Aufruf als Antwortcode zurückgegeben hat. Wenn 200 - OK oder 204 - No Content zurückgegeben wird, sollte der Client 404 - Not Found beim nächsten Aufruf von GET erhalten. Das liegt daran, dass 202 und 204 bedeuten, dass die Ressource sofort gelöscht wurde.

Wenn DELETE jedoch 202 - Accepted zurückgibt, besteht die Möglichkeit, dass der Client die Ressource anschließend für einige Zeit erfolgreich abrufen kann. Der Grund dafür ist, dass 202 bedeutet, dass die Ressource zum Löschen markiert, aber nicht unbedingt sofort bereinigt wurde.

Zweitens, wenn ein Cache beteiligt ist, sollte das Verhalten konsistent mit dem sein, was passieren würde, wenn kein Cache vorhanden wäre. Ein erfolgreiches DELETE sollte immer dazu führen, dass neben den zwischengespeicherten Kopien auch der tatsächliche Ursprung der Daten entfernt wird.

0

Wie ursprünglich angegeben, sollte ein GET, das einem DELETE folgt, einen HTTP 404-Fehler unabhängig vom Caching erzeugen, das vorhanden sein kann. Der Logikcode sollte intelligent genug sein, um den Datensatz aus dem persistenten Speicher sowie dem speicherinternen Speicher oder Cache zu entfernen. Darüber hinaus sollte die Benutzeroberfläche in der Lage sein, das Ergebnis des 404 mit dem von Ihnen als geeignet angesehenen Fluss oder Prozess zu behandeln.