1048 Stimmen

Was ist der Unterschied zwischen einer POST und einer PUT HTTP REQUEST?

Beide scheinen Daten an den Server im Körper zu senden, was unterscheidet sie also?

48voto

ChanGan Punkte 4094

Soweit ich weiß, wird PUT hauptsächlich zur Aktualisierung der Datensätze verwendet.

  1. POST - Um ein Dokument oder eine andere Ressource zu erstellen

  2. 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.

26voto

Long Nguyen Punkte 8040

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.

23voto

Jason Morrison Punkte 815

Andere haben bereits ausgezeichnete Antworten gepostet, ich wollte nur hinzufügen, dass mit den meisten Sprachen, Frameworks und Anwendungsfällen, die Sie behandeln werden, mit POST viel, viel öfters als PUT . Bis zu dem Punkt, an dem PUT, DELETE, usw. sind im Grunde Trivialfragen.

21voto

Najeebul Hasan Punkte 231

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.

14voto

user12786 Punkte 732

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).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X