Beide scheinen Daten an den Server im Körper zu senden, was unterscheidet sie also?
Antworten
Zu viele Anzeigen?Soweit ich weiß, wird PUT hauptsächlich zur Aktualisierung der Datensätze verwendet.
-
POST - Um ein Dokument oder eine andere Ressource zu erstellen
-
PUT - Zur Aktualisierung des erstellten Dokuments oder einer anderen Ressource.
Aber um das klarzustellen, ersetzt PUT normalerweise den vorhandenen Datensatz, wenn er vorhanden ist, und erstellt ihn, wenn er nicht vorhanden ist.
Definition von Vorgängen in Form von HTTP-Methoden
Das HTTP-Protokoll definiert eine Reihe von Methoden, die einer Anfrage eine semantische Bedeutung zuweisen. Die gängigen HTTP-Methoden, die von den meisten RESTful-Web-APIs verwendet werden, sind:
GET ruft eine Darstellung der Ressource unter dem angegebenen URI ab. Der Hauptteil der Antwortnachricht enthält die Einzelheiten der angeforderten Ressource.
POST erstellt eine neue Ressource mit dem angegebenen URI. Der Körper der Anforderungsnachricht enthält die Einzelheiten der neuen Ressource. Beachten Sie, dass POST auch verwendet werden kann, um Vorgänge auszulösen, die eigentlich keine Ressourcen erstellen.
PUT erstellt oder ersetzt die Ressource unter dem angegebenen URI. Im Text der Anforderungsnachricht wird die zu erstellende oder zu aktualisierende Ressource angegeben.
PATCH führt eine teilweise Aktualisierung einer Ressource durch. Der Anforderungskörper gibt den Satz von Änderungen an, die auf die Ressource anzuwenden sind.
DELETE entfernt die Ressource unter dem angegebenen URI.
Die Auswirkungen einer bestimmten Anfrage sollten davon abhängen, ob es sich bei der Ressource um eine Sammlung oder ein einzelnes Element handelt. Die folgende Tabelle fasst die allgemeinen Konventionen zusammen, die von den meisten RESTful-Implementierungen am Beispiel des elektronischen Handels verwendet werden. Möglicherweise werden nicht alle diese Anforderungen implementiert - dies hängt vom jeweiligen Szenario ab.
Ressource
POST
GET
PUT
DELETE
/Kunden
Einen neuen Kunden anlegen
Alle Kunden abrufen
Massenaktualisierung von Kunden
Alle Kunden entfernen
/Kunden/1
Fehler
Abrufen der Details für Kunde 1
Aktualisieren Sie die Details von Kunde 1, falls er existiert.
Kunde 1 entfernen
/Kunden/1/Bestellungen
Erstellen Sie einen neuen Auftrag für Kunde 1
Alle Aufträge für Kunde 1 abrufen
Massenaktualisierung von Aufträgen für Kunde 1
Alle Aufträge für Kunde 1 entfernen
Die Unterschiede zwischen POST, PUT und PATCH können verwirrend sein.
A POST Anfrage erstellt eine Ressource. Der Server weist einen URI für die neue Ressource zu und gibt diesen URI an den Client zurück. In der REST model
verwenden Sie häufig POST
Anfragen an Sammlungen. Die neue Ressource wird der Sammlung hinzugefügt. A POST
Anfrage kann auch verwendet werden, um Daten zur Verarbeitung an eine bestehende Ressource zu übermitteln, ohne dass eine neue Ressource erstellt wird.
A PUT Anfrage erstellt eine Ressource oder aktualisiert eine bestehende Ressource. Der Client gibt den URI für die Ressource an. Der Anforderungskörper enthält eine vollständige Darstellung der Ressource. Wenn eine Ressource mit dieser URI bereits existiert, wird sie ersetzt. Andernfalls wird eine neue Ressource erstellt, sofern der Server dies unterstützt. PUT
Anfragen werden am häufigsten für einzelne Ressourcen, z. B. einen bestimmten Kunden, und nicht für Sammlungen gestellt. Ein Server kann Aktualisierungen unterstützen, aber nicht die Erstellung über PUT
. Unterstützung der Erstellung über PUT
hängt davon ab, ob der Client einer Ressource einen URI sinnvoll zuordnen kann, bevor sie existiert. Wenn nicht, dann verwenden Sie POST
um Ressourcen zu schaffen und PUT or PATCH
zu aktualisieren.
A PATCH Anfrage führt eine teilweise Aktualisierung einer bestehenden Ressource durch. Der Client gibt den URI für die Ressource an. Der Anforderungskörper gibt eine Reihe von Änderungen an, die auf die Ressource anzuwenden sind. Dies kann effizienter sein als die Verwendung von PUT
Denn der Client sendet nur die Änderungen und nicht die gesamte Darstellung der Ressource. Technisch gesehen PATCH
kann auch eine neue Ressource erstellen (durch Angabe einer Reihe von Aktualisierungen für eine "Null"-Ressource), wenn der Server dies unterstützt.
PUT
Anfragen müssen idempotent sein. Wenn ein Kunde die gleiche PUT
Wenn Sie eine Anfrage mehrfach stellen, sollten die Ergebnisse immer die gleichen sein (dieselbe Ressource wird mit den gleichen Werten geändert). POST and PATCH
Anfragen sind nicht garantiert idempotent.
Bitte sehen Sie: http://zacharyvoase.com/2009/07/03/http-post-put-diff/
Ich habe mich in letzter Zeit über den weit verbreiteten Irrglauben von Webentwicklern geärgert, dass ein POST verwendet wird, um eine Ressource zu erstellen, und ein PUT, um eine Ressource zu aktualisieren/ändern.
Schauen Sie sich die Seite 55 des RFC 2616 ("Hypertext Transfer Protocol - HTTP/1.1") an, Abschnitt 9.6 ("PUT") werden Sie sehen, wofür PUT eigentlich da ist:
Die PUT-Methode verlangt, dass die eingeschlossene Entität unter der angegebenen Request-URI gespeichert wird.
Außerdem gibt es einen praktischen Absatz, der den Unterschied zwischen POST und PUT erklärt:
Der grundlegende Unterschied zwischen POST- und PUT-Anfragen spiegelt sich in der unterschiedlichen Bedeutung der Request-URI wider. Die URI in einer POST-Anfrage identifiziert die Ressource, die die eingeschlossene Entität bearbeiten wird. Bei dieser Ressource kann es sich um einen datenannehmenden Prozess, ein Gateway zu einem anderen Protokoll oder um eine separate Entität handeln, die Anmerkungen annimmt. Im Gegensatz dazu identifiziert der URI in einer PUT-Anforderung die der Anforderung beigefügte Entität - der User Agent weiß, welcher URI gemeint ist, und der Server MUSS NICHT versuchen, die Anforderung auf eine andere Ressource anzuwenden.
Es wird nichts über den Unterschied zwischen Aktualisierung/Erstellung erwähnt, denn darum geht es nicht. Es geht um den Unterschied zwischen dem hier:
obj.set_attribute(value) # A POST request.
Und dies:
obj.attribute = value # A PUT request.
Hören Sie also bitte auf, diesen weit verbreiteten Irrglauben zu verbreiten. Lesen Sie Ihre RFCs.
Ein POST wird als eine Art Fabrikmethode betrachtet. Sie fügen Daten hinzu, um das Gewünschte zu erstellen, und die Gegenstelle weiß, was sie damit tun soll. Ein PUT wird verwendet, um vorhandene Daten unter einer bestimmten URL zu aktualisieren oder um etwas Neues zu erstellen, wenn Sie den URI kennen und dieser noch nicht existiert (im Gegensatz zu einem POST, der etwas erstellt und bei Bedarf eine URL dazu zurückgibt).