Ein Grund für die Verwendung des Body in einer Löschanforderung ist die optimistische Gleichzeitigkeitskontrolle.
Sie lesen Version 1 eines Datensatzes.
GET /some-resource/1
200 OK { id:1, status:"unimportant", version:1 }
Ihr Kollege verliest Version 1 des Protokolls.
GET /some-resource/1
200 OK { id:1, status:"unimportant", version:1 }
Ihr Kollege ändert den Datensatz und aktualisiert die Datenbank, wodurch die Version auf 2 aktualisiert wird:
PUT /some-resource/1 { id:1, status:"important", version:1 }
200 OK { id:1, status:"important", version:2 }
Sie versuchen, den Datensatz zu löschen:
DELETE /some-resource/1 { id:1, version:1 }
409 Conflict
Sie sollten eine optimistische Sperrausnahme erhalten. Lesen Sie den Datensatz erneut, stellen Sie fest, dass er wichtig ist, und löschen Sie ihn vielleicht nicht.
Ein weiterer Grund für die Verwendung ist das gleichzeitige Löschen mehrerer Datensätze (z. B. in einem Raster mit Kontrollkästchen für die Zeilenauswahl).
DELETE /messages
[{id:1, version:2},
{id:99, version:3}]
204 No Content
Beachten Sie, dass jede Nachricht ihre eigene Version hat. Vielleicht können Sie mehrere Versionen mit mehreren Kopfzeilen angeben, aber bei George ist dies einfacher und viel bequemer.
Dies funktioniert in Tomcat (7.0.52) und Spring MVC (4.05), möglicherweise auch in früheren Versionen:
@RestController
public class TestController {
@RequestMapping(value="/echo-delete", method = RequestMethod.DELETE)
SomeBean echoDelete(@RequestBody SomeBean someBean) {
return someBean;
}
}
8 Stimmen
In ASP.NET WebApi 2 FromBody Parameter werden für HttpDelete Endpunkte ignoriert.
7 Stimmen
Ich habe ein ähnliches Anliegen, aber mein Fall ist anders. Ich möchte einen Batch-Löschauftrag erteilen, wenn ich hundert Objekte löschen möchte. Das ist sicherlich ein großer Leistungsschub für Netze vor HTTP 2.0.
3 Stimmen
Gibt es irgendwelche Änderungen in HTTP/2?