6336 Stimmen

Was ist der Unterschied zwischen POST und PUT in HTTP?

Hintergrundinformationenanalyse:

Gemäß RFC 2616, § 9.5 wird POST verwendet, um eine Ressource zu erstellen:

Die POST-Methode wird verwendet, um zu fordern, dass der Ursprungsserver die im Request eingebettete Entität als neue untergeordnete Ressource der im Request-Zeilen-URI identifizierten Ressource akzeptiert.

Gemäß RFC 2616, § 9.6 wird PUT verwendet, um eine Ressource zu erstellen oder zu ersetzen:

Die PUT-Methode fordert, dass die eingebettete Entität unter dem bereitgestellten Request-URI gespeichert wird. Wenn der Request-URI auf eine bereits vorhandene Ressource verweist, sollte die eingebettete Entität als modifizierte Version derjenigen angesehen werden, die auf dem Ursprungsserver liegt. Wenn der Request-URI nicht auf eine vorhandene Ressource zeigt und dieser URI als neue Ressource vom anfordernden User-Agent definiert werden kann, kann der Ursprungsserver die Ressource mit diesem URI erstellen.

Meine Frage:

Also, welche HTTP-Methode sollte verwendet werden, um eine Ressource zu erstellen? Oder sollten beide unterstützt werden?

66 Stimmen

Es kann hilfreich sein, die Definitionen in HTTPbis zu verwenden - Roy hat sich viel Arbeit gemacht, um sie zu klären. Siehe: tools.ietf.org/html/…

19 Stimmen

Nur um den Kommentar von @MarkNottingham auf den neuesten Stand zu bringen, hier sind POST und PUT, wie sie auf HTTPbis definiert sind.

48 Stimmen

Es scheint mir, dass dieser Diskurs aus der gängigen Praxis entstanden ist, REST durch die Beschreibung der HTTP-Methoden in Bezug auf CRUD-Operationen zu vereinfachen.

11voto

Rajan Punkte 1421

Wenn Sie mit Datenbankoperationen vertraut sind, gibt es

  1. Select
  2. Insert
  3. Update
  4. Delete
  5. Merge (Aktualisieren, falls bereits vorhanden, sonst einfügen)

Ich verwende PUT für Merge und Update-Operationen und POST für Einfügungen.

8voto

Mahozad Punkte 10508

POST wird verwendet, um Daten an einen Server zu senden.
PUT wird verwendet, um Daten in eine Ressource auf dem Server einzufügen (z.B. eine Datei).

Ich habe dies in einer Fußnote (Seite 55) aus dem Buch HTTP: Der definitive Leitfaden gesehen.

7voto

java_geek Punkte 16554

Im Praxis funktioniert POST gut für das Erstellen von Ressourcen. Die URL der neu erstellten Ressource sollte im Location-Antwortheader zurückgegeben werden. PUT sollte für die vollständige Aktualisierung einer Ressource verwendet werden. Bitte beachten Sie, dass dies die bewährten Methoden bei der Gestaltung einer RESTful-API sind. Die HTTP-Spezifikation schränkt die Verwendung von PUT/POST für das Erstellen/Aktualisieren von Ressourcen nicht ein. Schauen Sie sich http://techoctave.com/c7/posts/71-twitter-rest-api-dissected an, das die bewährten Methoden zusammenfasst.

0 Stimmen

Im Großen und Ganzen scheinst du gut informiert zu sein, wenn man sich durch all diesen Lärm liest. Ich würde jedoch sagen, dass wir PUT eher als die Ersatzmethode bezeichnen sollten, anstatt als die Create/Update-Methode. Ich denke, es beschreibt besser auf den Punkt gebracht, was es tut.

6voto

sushil pandey Punkte 742

POST: Verwenden Sie es zum Erstellen neuer Ressourcen. Es ist ähnlich wie INSERT (SQL-Anweisung) mit einer automatisch inkrementierten ID. Im Antwortteil enthält es eine neu generierte ID.

POST wird auch zum Aktualisieren eines Datensatzes verwendet.

PUT: Verwenden Sie es zum Erstellen einer neuen Ressource, bei der ich den Identitätsschlüssel kenne. Es ist ähnlich wie INSERT (SQL-Anweisung), bei der ich im Voraus den Identitätsschlüssel kenne. Im Antwortteil sendet es nichts.

PUT wird auch zum Aktualisieren einer Ressource verwendet.

6 Stimmen

PUT ist nicht für ein Update gedacht, sondern zum Ersetzen. Beachten Sie, dass Sie beim Erstellen nichts durch etwas ersetzen. POST ist absolut nicht für ein Update in irgendeiner Form.

4voto

baptx Punkte 2810

Ich denke, dass es auch einen interessanten Punkt gibt, der bei dieser PUT vs POST Frage nicht geteilt wurde:

Wenn Sie eine Webanwendung haben möchten, die ohne JavaScript funktioniert (zum Beispiel, wenn jemand einen textbasierten Browser wie Lynx verwendet oder ein Browser-Add-On wie NoScript oder uMatrix), müssen Sie POST verwenden, um Daten zu senden, da HTML-Formulare nur GET- und POST-HTTP-Anfragen unterstützen.

Im Grunde genommen, wenn Sie die progressive Verbesserung verwenden möchten (https://de.wikipedia.org/wiki/Progressive_Enhancement), um Ihre Webanwendung überall funktionieren zu lassen, mit und ohne JavaScript, können Sie keine anderen HTTP-Methoden wie PUT oder DELETE verwenden, die nur in HTTP-Version 1.1 hinzugefügt wurden.

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