PUT bedeutet, was in der HTTP-Spezifikation definiert ist. Clients und Server können diese Bedeutung nicht ändern. Wenn Clients oder Server PUT in einer Weise verwenden, die ihrer Definition widerspricht, kann mindestens Folgendes passieren:
Put ist per Definition idempotent. Das bedeutet, dass ein Client (oder Vermittler!) Einen PUT beliebig oft wiederholen kann und sicher sein muss, dass der Effekt der gleiche ist. Angenommen, ein Intermediär empfängt eine PUT-Anforderung von einem Client. Wenn die Anforderung an den Server weitergeleitet wird, liegt ein Netzwerkproblem vor. Der Intermediär weiß definitionsgemäß, dass er den PUT erneut versuchen kann, bis er erfolgreich ist. Wenn der Server PUT nicht idempotent verwendet, haben diese möglichen Mehrfachaufrufe einen unerwünschten Effekt.
Wenn Sie eine partielle Aktualisierung durchführen möchten, verwenden Sie PATCH oder verwenden Sie POST für eine Unterressource und geben Sie 303 Weitere Informationen zu der Hauptressource, z.
POST /account/445/owner/address
Content-Type: application/x-www-form-urlencoded
street=MyWay&zip=22222&city=Manchaster
303 See Other
Location: /account/445
EDIT: Auf die allgemeine Frage, warum teilweise Updates können nicht idempotent werden:
Eine partielle Update kann nicht im Allgemeinen idempotent werden, da die Idempotenz auf die Semantik Medientyp abhängt. IOW, können Sie möglicherweise ein Format angeben, das idempotente Patches zulässt, aber PATCH kann nicht garantiert werden, dass es für jeden Fall idempotent ist. Da die Semantik einer Methode (aus Gründen der Orthogonalität) keine Funktion des Medientyps sein kann, muss PATCH als nicht idempotent definiert werden. Und PUT (als idempotent definiert) kann nicht für Teilupdates verwendet werden.
Sehen Sie hier für eine weitere Diskussion der gleichen Frage: http://tech.groups.yahoo.com/group/rest-discuss/message/17415 - Ich habe alles gelesen und sehe keinen zwingenden Grund für die Definition von PUT nur für vollständige Updates. – lkraider
@lkraider Ich stimme zu. Ich sehe keinen Vorteil außer einigen, weil die HTTP-Spezifikation eine Unterscheidung zwischen PUT und PATCH macht (was nicht sehr praktisch ist). – Brenden