webentwicklung-frage-antwort-db.com.de

RESTful - Was sollte ein DELETE-Antworttext enthalten?

Angenommen, ich habe eine API, mit der Sie Benutzer abrufen können:

GET /RESTAPI/user/

Und Sie können Benutzer löschen, indem Sie:

DELETE /RESTAPI/user/123

Was ist die Konvention RESTful, was der Antworttext von DELETE enthalten soll? Ich hatte erwartet, dass es die neue Liste aller Benutzer sein sollte, die jetzt nicht mehr den Benutzer mit der ID 123 enthält.

Durch googeln bekam ich keine befriedigenden Antworten. Ich habe nur Meinungen dazu gefunden , aber gibt es keine strikte Definition von RESTful Services ?

Dies ist KEIN Duplikat von Was soll ein RESTful API POST/DELETE im Body zurückgeben? und Was soll REST PUT/POST/DELETE-Aufrufe zurückgeben?) durch eine Konvention? da diese Frage nach einer strengen Definition in Bezug auf DELETE verlangt, wurden diese Fragen nur durch lose Meinungen beantwortet.

40
tmuecksch

Der Grund, warum Sie keine harten Antworten erhalten, ist, dass es keinen harten RESTful-Standard gibt. Daher kann ich nur vorschlagen, dass Sie einen harten Standard erstellen und in Ihren eigenen APIs daran festhalten

Ich habe dies als Leitfaden für RESTful-Services verwendet http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api

Es heißt antworten mit einem 204-Status und einem leeren Körper

Ich halte mich an diese Standards und dokumentiere sie gut für alle, die meine APIs verwenden möchten

44
Leon

204 No Content Ist eine beliebte Antwort für DELETE und gelegentlich auch PUT.

Wenn Sie jedoch HATEOAS implementieren, ist es möglicherweise idealer, ein 200 OK Mit folgenden Links zurückzugeben. Dies liegt daran, dass eine HATEOAS REST API dem Client Kontext bereitstellt. Denken Sie an den Speicherort, zu dem eine Benutzeranwendung nach erfolgreicher Ausgabe eines Löschbefehls navigiert. Hier ein kurzer Artikelauszug mit weiteren Erläuterungen dazu. Weitere Informationen finden Sie im Blog-Artikel.

Vermeiden Sie 204 Antworten, wenn Sie eine HATEOAS-Anwendung erstellen.

Dies ist eine Lektion über REST API-Design, die ich beim Erstellen nicht-trivialer REST APIs gelernt habe. Um den Client so gut wie möglich zu unterstützen, a REST API sollte keine 204 (No Content) Antworten zurückgeben.

Aus der Sicht des Dienstes kann eine Antwort 204 (kein Inhalt) eine vollkommen gültige Antwort auf eine POST-, PUT- oder DELETE-Anforderung sein. Insbesondere für eine DELETE-Anfrage erscheint es sehr angebracht, denn was können Sie noch sagen?

Aus der Sicht eines richtigen HATEOAS-fähigen Clients ist eine Antwort jedoch problematisch, da keine Links zu folgen sind. Wenn Hypermedia als Engine für den Anwendungsstatus fungiert und keine Links vorhanden sind, gibt es keinen Status. Mit anderen Worten, eine Antwort 204 wirft alle Anwendungszustände weg.

Dieser Artikel behandelt POST, PUT, DELETE und GET. Hier ist die spezielle Diskussion zu DELETE:

Beantworten von DELETE-Anfragen

Eine DELETE-Anforderung repräsentiert die Absicht, eine Ressource zu löschen. Was kann der Dienst also tun, wenn er eine DELETE-Anforderung erfolgreich verarbeitet, als eine 204 (No Content) zurückzugeben? Immerhin wurde die Ressource gerade entfernt.

Eine Ressource ist häufig ein Mitglied einer Sammlung oder gehört auf andere Weise einem Container. Als Beispiel stellt http://foo.ploeh.dk/api/tags/rock ein "rock" -Tag dar, aber eine andere Sichtweise ist, dass die/rock-Ressource in der Datei enthalten ist Tags Container (der selbst eine Ressource ist). Dies sollte Atom Pub-Benutzern vertraut sein.

Stellen Sie sich vor, Sie möchten die Ressource http://foo.ploeh.dk/api/tags/rock löschen. Um dieses Ziel zu erreichen, erteilen Sie eine DELETE-Anforderung. Wenn alles, was Ihr Kunde zurückbekommt, ein 204 (kein Inhalt) ist, hat er nur seinen Kontext verloren. Wohin geht es von dort? Wenn Sie den Client nicht auf dem neuesten Stand halten, wissen Sie nicht, woher Sie kommen.

Anstatt 204 (No Content) zurückzugeben, sollte die API hilfreich sein und Orte vorschlagen, an die man gehen kann. In diesem Beispiel ist meines Erachtens ein offensichtlicher Link zu http://foo.ploeh.dk/api/tags - dem Container, aus dem der Client gerade eine Ressource gelöscht hat. Möglicherweise möchte der Kunde weitere Ressourcen löschen, sodass dies ein hilfreicher Link wäre.

9
Grokify

Was ist die REST-Konvention darüber, was der Antworttext des DELETE enthalten soll?

REST ist ein Architekturstil, der von Fielding im Kapitel 5 seiner Dissertation definiert wurde und eine Reihe von Einschränkungen für Anwendungen beschreibt, die mit dieser Architektur erstellt wurden. REST soll protokollunabhängig sein , aber das Kapitel 6 derselben Dissertation beschreibt wie REST wird über HTTP angewendet.

Sobald Ihre REST -Anwendung über dem HTTP-Protokoll erstellt wurde, sollten Sie sich mit der HTTP-Semantik vertraut machen. Die Semantik des HTTP/1.1-Protokolls wird derzeit im Abschnitt RFC 7231 .


Die Antwortnutzlast einer DELETE -Anforderung, die erfolgreich war, kann:

  • Sei leer oder;
  • Fügen Sie eine Darstellung des Status der Aktion hinzu.

Die folgenden Antwortstatuscodes eignen sich für eine DELETE -Anforderung, die erfolgreich war:

  • 202 : Die Anfrage wurde zur Bearbeitung angenommen, die Bearbeitung ist jedoch noch nicht abgeschlossen.
  • 204 : Der Server hat die Anforderung erfolgreich ausgeführt und es ist kein zusätzlicher Inhalt zum Senden im Antwortnutzlasttext vorhanden.
  • 200 : Die Anforderung war erfolgreich und die Anforderungsnutzdaten enthalten eine Darstellung des Status der Aktion.

Siehe das folgende Zitat aus dem RFC 7231 :

Wenn eine DELETE -Methode erfolgreich angewendet wird, MUSS der Origin-Server ein 202 (Akzeptiert) Statuscode, wenn die Aktion wahrscheinlich erfolgreich ist, aber noch nicht ausgeführt wurde, ein 204 (No Content) -Statuscode, wenn die Aktion ausgeführt wurde und keine weiteren Informationen bereitgestellt werden sollen, oder ein 200 (OK) Statuscode, wenn die Aktion ausgeführt wurde und die Antwortnachricht eine Darstellung enthält, die den Status beschreibt.

6
cassiomolin