HTTPQUERY
Deutsch

DELETE

Verwendung

Eine DELETE-Anfrage weist den Server an, die Zielressource zu entfernen. Der Server legt fest, was Entfernen in der Praxis bedeutet: Die Ressource kann dauerhaft gelöscht, archiviert oder als inaktiv markiert werden.

REST-APIs setzen stark auf DELETE, um die Zerstörung von Ressourcen abzubilden. Ein API-Endpunkt wie DELETE /api/users/123 signalisiert die klare Absicht, den durch 123 identifizierten Benutzerdatensatz zu entfernen. Das entspricht direkt dem Muster PUT/POST/GET/DELETE für Erstellen-, Aktualisieren-, Lesen- und Löschen-Operationen.

HTML-Formulare unterstützen nur GET und POST. JavaScript-APIs wie fetch und XMLHttpRequest unterstützen DELETE nativ. Einige Frameworks verwenden als Behelfslösung POST mit einem Parameter _method=DELETE.

Der Server antwortet je nach Ergebnis mit einem von mehreren Statuscodes:

Ein hartes Löschen entfernt die Ressource dauerhaft. Nachfolgende GET-Anfragen geben 404 oder 410 Gone zurück. Ein weiches Löschen markiert die Ressource als inaktiv, ohne die zugrunde liegenden Daten zu entfernen. Die Ressource bleibt über eine Admin-API oder mit einem Abfrageparameter abrufbar. 410 teilt eine dauerhafte Entfernung mit, während 404 passend ist, wenn die Ressource unter der URI nicht mehr existiert.

Eine DELETE-Anfrage ist idempotent. Wird dieselbe Anfrage mehrfach gesendet, ergibt sich derselbe Serverzustand wie beim einmaligen Senden. Die erste Anfrage entfernt die Ressource, nachfolgende Anfragen haben keine zusätzliche Wirkung. Die Antwortcodes können sich allerdings unterscheiden: Die erste Anfrage gibt 200 OK oder 204 No Content zurück, spätere Anfragen 404 Not Found oder 410 Gone.

Eine Ressource löschen

Ein Client fordert die Entfernung einer bestimmten Datei an. Der Server entfernt die Datei und antwortet mit 204 No Content, um die Aktion ohne Nachrichten-Body zu bestätigen.

Anfrage

DELETE /uploads/report.pdf HTTP/1.1
Host: api.example.re

Antwort

HTTP/1.1 204 No Content

REST-API-Löschung mit Bestätigung

Eine REST-API gibt 200 OK mit einem JSON-Body zurück, der die Löschung bestätigt und die entfernte Ressource benennt.

Anfrage

DELETE /api/users/123 HTTP/1.1
Host: api.example.re
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9...

Antwort

HTTP/1.1 200 OK
Content-Type: application/json

{"deleted": true, "id": 123}

Der Authorization-Header führt ein Bearer-Token mit, da die meisten APIs vor destruktiven Operationen eine Authentifizierung verlangen.

CORS

Cross-Origin-DELETE-Anfragen lösen stets einen CORS-Preflight aus. Der Browser sendet zuerst eine OPTIONS-Anfrage, um zu bestätigen, dass der Server DELETE für die Zielressource erlaubt.

Anfrage- und Antwort-Body

DELETE-Anfragen dürfen einen Body enthalten, dessen Semantik ist jedoch undefiniert. Manche Zwischenstationen weisen DELETE-Anfragen mit Body aufgrund der Risiken von Request Smuggling zurück. Die meisten APIs verwenden für DELETE keinen Anfrage-Body. Wird ein Body benötigt, etwa für Massenlöschungen, legt der Server das erwartete Format fest.

Der Antwort-Body hängt vom Statuscode ab. Eine Antwort mit 200 OK enthält einen Body, der das Ergebnis beschreibt oder die gelöschte Ressource zurückgibt. Eine Antwort mit 204 No Content bestätigt die Löschung ohne Body. Eine Antwort mit 202 Accepted zeigt an, dass die Löschung eingereiht wurde oder läuft, und enthält typischerweise einen Verweis auf einen Status-Monitor.

Antwort-Statuscodes

204 No Content ist die häufigste Antwort bei unkomplizierten Löschungen, bei denen kein Body benötigt wird. 200 OK ist passend, wenn der Server die gelöschte Ressource oder eine Bestätigungsmeldung im Antwort-Body zurückgibt.

202 Accepted signalisiert, dass die Löschung eingereiht wurde oder asynchron erfolgt. Die Antwort enthält typischerweise einen Location-Header oder einen Body, der auf einen Status-Endpunkt verweist, an dem der Client den Fortschritt prüft.

Nachfolgende Anfragen an eine gelöschte Ressource geben 404 Not Found oder 410 Gone zurück. Eine 410-Antwort zeigt an, dass die Ressource zuvor existierte und absichtlich entfernt wurde, während 404 diese Unterscheidung nicht trifft.