Ist die Bereitstellung von Parametern für eine HTTP-DELETE-Anforderung nicht REST-fähig?
Mein Szenario ist, dass ich das Modell "Sind Sie sicher, dass Sie das löschen möchten?" Szenario. In einigen Fällen deutet der Status der Ressource darauf hin, dass das angeforderte Löschen möglicherweise ungültig ist. Sie können sich wahrscheinlich selbst einige Szenarien vorstellen, in denen eine Bestätigung eines Löschvorgangs erforderlich ist
Die Lösung, die wir gewählt haben, besteht darin, einen Parameter an die Löschanforderung zu übergeben, um anzuzeigen, dass es in Ordnung ist, mit dem Löschen fortzufahren ("? Force_delete = true").
z.B
DELETE http://server/resource/id?force_delete=true
Ich glaube, dass es seitdem immer noch erholsam ist:
(a) Die Semantik von DELETE wird nicht geändert. Der Benutzer kann weiterhin eine normale DELETE-Anforderung senden. Dies kann jedoch bei 409 fehlschlagen, und der Hauptteil der Antwort erklärt, warum. Ich sage, kann fehlschlagen, weil (aus Gründen, die es nicht wert sind, erklärt zu werden) in einigen Fällen kein Grund besteht, den Benutzer dazu aufzufordern.
(b) In Roys Dissertation gibt es keinen Hinweis darauf, dass dies gegen den Geist von REST verstößt. Warum sollte dies der Fall sein, da HTTP nur eine Implementierung von REST ist? Warum sollte die Übergabe von HTTP-Parametern von Bedeutung sein?
Kann mich jemand auf eine endgültige Aussage hinweisen, die den Grund festhält, warum dies nicht RESTful ist?
Wenn der Benutzer bei einer verwandten Frage nicht force_delete angibt, kehre ich zurück. Ist dies der 409 Conflict
am besten geeignete Antwortcode?
Nachverfolgen
Nach einigen weiteren Untersuchungen denke ich, dass das Hinzufügen von Parametern zum DELETE gegen mehrere Prinzipien verstoßen kann.
Das erste ist, dass die Implementierung möglicherweise gegen die "Uniform Interface" verstößt (siehe Abschnitt 5.1.5 von Roys Dissertation
Durch Hinzufügen von 'force_delete' fügen wir der bereits gut definierten DELETE-Methode eine zusätzliche Einschränkung hinzu. Diese Einschränkung ist nur für uns von Bedeutung.
Sie könnten auch argumentieren, dass es gegen den "5.1.2 Client-Server" verstößt, da der Bestätigungsdialog wirklich ein UI-Problem darstellt und wiederum nicht alle Clients das Löschen bestätigen möchten.
Vorschläge jemand?