Bei der Programmierung im RESTful-Stil sollten wir HTTP-Methoden als Bausteine verwenden. Ich bin allerdings etwas verwirrt, welche Methoden zu den klassischen CRUD-Methoden passen. GET / Read und DELETE / Delete sind offensichtlich genug.
Was ist jedoch der Unterschied zwischen PUT / POST? Stimmen sie eins zu eins mit Erstellen und Aktualisieren überein?
http
rest
crud
http-method
Drew
quelle
quelle
Der ganze Schlüssel ist, ob Sie eine machen idempotente Änderung vornehmen oder nicht. Das heißt, wenn das zweimalige Ergreifen der Nachricht dazu führt, dass „dasselbe“ vorhanden ist, als ob es nur einmal ausgeführt worden wäre, haben Sie eine idempotente Änderung und sie sollte PUT zugeordnet werden. Wenn nicht, wird es dem POST zugeordnet. Wenn Sie dem Client niemals erlauben, URLs zu synthetisieren, ist PUT ziemlich nah an Update und POST kann Create problemlos verarbeiten, aber dies ist mit Sicherheit nicht die einzige Möglichkeit, dies zu tun. Wenn der Client weiß, dass er
/foo/abc
Inhalte erstellen möchte und weiß, welche Inhalte dort abgelegt werden sollen, funktioniert dies einwandfrei als PUT.Die kanonische Beschreibung eines POST lautet, wenn Sie sich zum Kauf von etwas verpflichten: Dies ist eine Aktion, die niemand wiederholen möchte, ohne es zu wissen. Im Gegensatz dazu kann die vorherige Einstellung der Versandadresse für die Bestellung mit PUT problemlos erfolgen: Es spielt keine Rolle, ob Sie
6 Anywhere Dr, Nowhereville
einmal, zweimal oder hundertmal zum Senden aufgefordert werden: Es ist immer noch dieselbe Adresse. Bedeutet das, dass es sich um ein Update handelt? Könnte sein ... Es hängt alles davon ab, wie Sie das Backend schreiben möchten. (Beachten Sie, dass die Ergebnisse möglicherweise nicht identisch sind: Sie können dem Benutzer melden, wann er zuletzt einen PUT als Teil der Darstellung der Ressource durchgeführt hat, um sicherzustellen, dass wiederholte PUTs kein identisches Ergebnis verursachen, das Ergebnis jedoch weiterhin im funktionalen Sinne „gleich“ sein.)quelle
POST
undPUT
ist interessant und sollte die Antwort auf "Was ist 'erstellen' und was ist 'aktualisieren'?" so viel klarer. In Bezug auf die Implementierung der API würde sich daraus ergeben, dass eine WiederholungPUT
ein stilles No-Op darstellen sollte, während eine WiederholungPOST
eine Ausnahme auslösen könnte, wenn ein Aspekt der gesendeten Daten im Datenspeicher eindeutig bleiben soll das unterstützt die Anwendung.Ich habe nach der gleichen Antwort gesucht, hier ist, was IBM sagt. IBM Link
quelle
Derzeit (2016) sind die neuesten HTTP-Verben GET, POST, PATCH , PUT und DELETE
Überblick
Hoffe das hilft!
Wenn Sie daran interessiert sind, REST-APIs zu entwerfen, ist dies eine gute Lektüre! Website Online-Version Github Repository
quelle
Es gibt ein großartiges Youtube-Videogespräch von Stormpath, das dies tatsächlich erklärt. Die URL sollte zum richtigen Teil des Videos springen:
Sturmpfad Youtube Video
Es lohnt sich auch zu sehen, dass es mehr als eine Stunde dauert, aber sehr interessant, wenn Sie daran denken, Zeit in den Aufbau einer REST-API zu investieren.
quelle
Es kommt auf die konkrete Situation an .. aber im Allgemeinen:
PUT = Aktualisieren oder Ändern einer konkreten Ressource mit einem konkreten URI der Ressource.
POST = Erstellen Sie eine neue Ressource unter der Quelle des angegebenen URI.
Dh
Bearbeiten Sie einen Blog-Beitrag:
PUT: / blog / entry / 1
Erstellen Sie eine neue:
POST: / blog / entry
PUT kann unter bestimmten Umständen eine neue Ressource erstellen, wenn der URI der neuen Ressource vor der Anforderung klar ist. POST kann auch verwendet werden, um mehrere andere Anwendungsfälle zu implementieren, die von den anderen nicht abgedeckt werden (GET, PUT, DELETE, HEAD, OPTIONS).
Das allgemeine Verständnis für CRUD-Systeme lautet GET = Anfrage, POST = Erstellen, Put = Aktualisieren, DELETE = Löschen
quelle
Die Bausteine von REST sind hauptsächlich die Ressourcen (und URI) und die Hypermedien. In diesem Zusammenhang
GET
ist dies der Weg, um eine Darstellung der Ressource zu erhalten (die tatsächlichSELECT
in CRUD-Begriffen einer zugeordnet werden kann).Sie sollten jedoch nicht unbedingt eine Eins-zu-Eins-Zuordnung zwischen CRUD-Operationen und HTTP-Verben erwarten. Der Hauptunterschied zwischen
PUT
undPOST
liegt in ihrer idempotenten Eigenschaft.POST
wird auch häufiger für Teilaktualisierungen verwendet, wiePUT
Allgemeinen eine vollständige neue Darstellung der Ressource gesendet wird.Ich würde vorschlagen, dies zu lesen:
Die HTTP-Spezifikation ist auch eine nützliche Referenz:
quelle
Im Allgemeinen ist dies das Muster, das ich verwende:
quelle
Das Symfony- Projekt versucht, seine HTTP-Methoden mit CRUD-Methoden verknüpft zu halten, und ihre Liste ordnet sie wie folgt zu:
Es ist erwähnenswert, dass, wie sie auf dieser Seite sagen: "In Wirklichkeit unterstützen viele moderne Browser die PUT- und DELETE-Methoden nicht."
Soweit ich mich erinnere, "fälscht" Symfony PUT und DELETE für diejenigen Browser, die sie beim Generieren ihrer Formulare nicht unterstützen, um zu versuchen, der theoretisch korrekten HTTP-Methode so nahe wie möglich zu kommen, auch wenn ein Browser dies nicht unterstützt es.
quelle