2013-04-05 8 views
20

Ich versuche eine RESTful Webapp zu erstellen, in der ich GET, POST, PUT und DELETE verwende. Aber ich hatte eine Frage über die Verwendung von DELETE in dieser bestimmten App.RESTful Soft Delete

Ein bisschen Hintergrund zuerst:

Meine Webapp verwalten generische Einheiten, die auch verwaltet werden (und es passiert, immer erstellt) in einem anderen System. In meiner Webapp wird jede Entität mit einem eindeutigen Schlüssel in der Datenbank gespeichert. Aber die Art, wie wir auf sie über URLs zugreifen werden, ist mit dem eindeutigen Schlüssel des anderen Systems.

Ein einfaches Beispiel wird dies klar machen, denke ich. Nehmen Sie die URL /entity/1. Dies zeigt Informationen für die Entität mit der ID 1 im anderen System an und nicht mein eigenes System. In der Tat werden IDs in meinem System vollständig ausgeblendet. Es wird kein URL-Schema für den Zugriff auf die Entität mit der ID 1 in meinem eigenen System geben.

In Ordnung, jetzt, da wir wissen, wie meine Webapp strukturiert ist, kehren wir zum Löschen dieser Entitäten zurück.

Es wird eine Möglichkeit geben, Entitäten in meinem System zu 'löschen', aber ich setze Anführungszeichen darum herum, weil es sie nicht tatsächlich aus der Datenbank löscht. Stattdessen werden sie mit einer Eigenschaft gekennzeichnet, die verhindert, dass sie angezeigt wird, wenn Sie zu /entity/1 wechseln.

Aus diesem Grund fühle ich mich wie sollte ich PUT (‚Löschen‘ auf diese Weise idempotent werden) verwenden, da ich aus der Sicht der Daten, einfach eine Eigenschaft festlegen.

Also, die Frage: Hat der RESTful Ansatz hat Treue zu den Daten (in diesem Fall ist es klar, dass ich bin PUT ing) oder die Darstellung der Daten in der App (in diesem Fall scheint es, dass ich bin DELETE ing)?

Antwort

31

Sie sollten DELETE verwenden.

Was Sie mit Ihren Daten tun wollen, heißt "Löschen": Sie setzen ein Flag und vermeiden, dass markierte Elemente angezeigt werden. Dies ist intern in Ihrer Webanwendung und der Benutzer muss nicht wissen, dass Sie nicht löschen, sondern löschen möchten oder was auch immer Sie tun möchten. Deshalb sollten Sie das DELETE Verb verwenden.

+1

Ja - Sie sollten das Verb/method verwenden, das beschreibt, was Sie wollen. LÖSCHEN ist die bessere Wahl –

+0

Ich stimme auch mit alestanis überein. –

+0

Danke für die Antwort, alestanis! Ich bin gekommen, um mit Ihrer Argumentation übereinzustimmen; Ich warte nur ein paar Tage, um zu sehen, ob andere überzeugende Antworten in beide Richtungen erscheinen, bevor ich akzeptiere. – jmeas

Verwandte Themen