Gibt es irgendetwas an der Übergabe von Parametern an eine HTTP-DELETE-Anforderung, das nicht RESTful ist?
Mein Szenario ist, dass ich das Szenario "Sind Sie sicher, dass Sie das löschen wollen?" modelliere. In einigen Fällen deutet der Zustand der Ressource darauf hin, dass die angeforderte Löschung ungültig sein könnte. Sie können sich wahrscheinlich selbst einige Szenarien vorstellen, in denen eine Bestätigung des Löschens erforderlich ist
Die von uns gewählte Lösung besteht darin, der Löschanfrage einen Parameter zu übergeben, der angibt, dass die Löschung durchgeführt werden darf ("?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-Anfrage senden, aber diese kann scheitern mit 409 und der Text der Antwort wird erklären, warum. Ich sage "kann fehlschlagen", weil es (aus nicht erklärungsbedürftigen Gründen) in manchen Fällen keinen Grund gibt, den Benutzer aufzufordern.
(b) In Roys Dissertation gibt es keinen Hinweis darauf, dass dies gegen den Geist von REST verstößt - warum auch, denn HTTP ist nur eine Implementierung von REST, warum also sollte die Übergabe von HTTP-Parametern eine Rolle spielen?
Kann jemand mich auf eine definitive Aussage, die den Grund, warum dies nicht RESTful nagelt zeigen?
Auf eine verwandte Frage, wenn der Benutzer nicht angeben, force_delete dann bin ich zurück 409 Conflict
- Ist das der am besten geeignete Antwortcode?
Weiterverfolgung
Nach weiteren Nachforschungen bin ich der Meinung, dass das Hinzufügen von Parametern zu DELETE mehrere Grundsätze verletzen könnte.
Die erste ist, dass die Implementierung möglicherweise gegen die "Einheitliche Schnittstelle" verstößt (siehe Abschnitt 5.1.5 von Roys Dissertation
Durch das Hinzufügen von "force_delete" fügen wir eine zusätzliche Einschränkung zu der bereits gut definierten DELETE-Methode hinzu. Diese Einschränkung ist nur für uns von Bedeutung.
Man könnte auch argumentieren, dass dies gegen "5.1.2 Client-Server" verstößt, da der Bestätigungsdialog eigentlich eine Frage der Benutzeroberfläche ist und wiederum nicht alle Clients die Löschung bestätigen wollen.
Hat jemand einen Vorschlag?