wake-up-neo.net

REST - Sollte nicht PUT = Create und POST = Update

Sollte PUT nicht für Create und POST für Update verwendet werden, da PUT idempotent ist.

Auf diese Weise geben mehrere PUTs für dieselbe Bestellung nur eine Bestellung auf?

27
Tawani

Der Unterschied besteht darin, dass ein PUT für eine bekannte Ressource ist und daher zum Aktualisieren verwendet wird, wie hier angegeben in rfc2616. 

Der grundlegende Unterschied zwischen den Anforderungen POST und PUT ist spiegelt sich in der unterschiedlichen Bedeutung der Request-URI wider. Die URI in einer POST request gibt die Ressource an, die das eingeschlossene .__ verarbeitet. Entität. Diese Ressource kann ein Daten akzeptierender Prozess sein, ein Gateway zu ein anderes Protokoll oder eine separate Entität, die Annotationen akzeptiert. Im Im Gegensatz dazu identifiziert die URI in einer PUT-Anforderung die mit .__ eingeschlossene Entität. die Anforderung - der Benutzeragent weiß, welche URI beabsichtigt ist, und die Server darf nicht versuchen, die Anforderung auf eine andere Ressource anzuwenden.

Ich sehe jedoch anhand der Namen selbst, woher Sie kommen. 

Normalerweise schaue ich POST an, da es der URI sein sollte, der den Inhalt meiner Anfrage verarbeitet (in den meisten Fällen die Parameter als Formularwerte) und somit eine neue Ressource und PUT als URI erstellt Gegenstand meiner Anfrage (/ users/1234), eine Ressource, die bereits vorhanden ist.

Ich glaube, die Nomenklatur geht weit zurück, betrachten wir das frühe Netz. Möglicherweise möchten Sie die Nachricht an ein Message Board POST und anschließend zu einem späteren Zeitpunkt PUT zusätzlichen Inhalt in ihre Nachricht einfügen.

51
JP Silvashy

PUT sollte zum Erstellen verwendet werden, wenn und nur wenn möglich, dass der URI der neuen Ressource für einen Client bekannt ist. Möglicherweise wird der neue URI vom Dienst in der Ressourcendarstellung angekündigt. Zum Beispiel kann der Dienst eine Art Übergabeformular bereitstellen und einen Aktions-URI angeben, der ein vorgefüllter URI der neuen Ressource sein kann. In diesem Fall ja, wenn die erste PUT-Anforderung erfolgreich eine Ressource nach der PUT-Anforderung erstellt, wird diese nur ersetzt. 

Es ist in Ordnung, POST für Updates zu verwenden. Es wurde nie gesagt, dass POST nur für "Erstellen" -Vorgänge gedacht ist. 

6
ioseb

Es gibt keine strikte Übereinstimmung zwischen HTTP-Methoden und CRUD. Dies ist eine Konvention, die von einigen Frameworks übernommen wurde, hat aber nichts mit REST - Einschränkungen zu tun.

Eine PUT-Anforderung fordert den Server auf, den Inhalt des angegebenen URI durch die beiliegende Darstellung zu ersetzen, wobei der aktuelle Inhalt vollständig ignoriert wird. Eine gute Analogie ist der Befehl mv in einer Shell. Die neue Datei wird am Ziel erstellt, wenn sie nicht vorhanden ist, oder ersetzt die vorhandene Datei. In beiden Fällen ignoriert es vollständig, was sich darin befindet. Sie können dies verwenden, um etwas zu erstellen, aber auch etwas zu aktualisieren, solange Sie eine vollständige Darstellung senden.

POST fordert die Zielressource auf, die Nutzdaten nach vordefinierten Regeln zu verarbeiten. Daher ist dies die Methode, die für alle Vorgänge verwendet werden soll, die nicht bereits durch das HTTP-Protokoll standardisiert sind. Dies bedeutet, dass eine POST alles tun kann, was Sie möchten, solange Sie nicht die Funktionalität einer anderen Methode duplizieren - beispielsweise POST zum Abrufen, wenn Sie GET verwenden sollten - und dies ordnungsgemäß dokumentieren.

Sie können also sowohl für das Erstellen als auch für das Update verwenden, abhängig von den genauen Umständen. Mit PUT müssen Sie jedoch für alle Elemente Ihrer API konsistente Semantiken verwenden und Sie können keine teilweisen Aktualisierungen vornehmen. Mit POST können Sie alles tun, was Sie möchten solange Sie dokumentieren, wie genau es funktioniert.

6
Pedro Werneck

Es hängt davon ab ... dass Sie Sites/Datensätze mit beiden erstellen/aktualisieren können .. Wenn der Client den URI angibt, ist PUT der richtige Weg, z. Jeder Code-Editor wie Dreamweaver, PUT, ist das richtige Protokoll.

schauen Sie sich auch diesen Thread an: vs post in Ruhe setzen

0
micho