it-swarm.com.de

Welche HTTP-Methoden passen zu welchen CRUD-Methoden?

Bei der Programmierung im REST-Stil sollten wir HTTP-Methoden als Bausteine ​​verwenden. Ich bin allerdings ein wenig verwirrt, welche Methoden zu den klassischen CRUD-Methoden passen. GET/Read und DELETE/Delete liegen auf der Hand.

Was ist jedoch der Unterschied zwischen PUT/POST? Stimmen sie eins zu eins mit Erstellen und Aktualisieren überein?

201
Drew
Create = PUT with a new URI
         POST to a base URI returning a newly created URI
Read   = GET
Update = PUT with an existing URI
Delete = DELETE

PUT kann abhängig vom Vorhandensein des mit dem PUT verwendeten URI sowohl Create als auch Update zugeordnet werden.

Zu erstellende POST-Karten.

Korrektur: POST kann auch Update zuordnen, obwohl es normalerweise für Create verwendet wird. POST kann auch ein teilweises Update sein, sodass wir die vorgeschlagene PATCH-Methode nicht benötigen .

284
Paul Morgan

Der ganze Schlüssel ist, ob Sie eine idempotente Änderung vornehmen oder nicht. Das heißt, wenn zweimaliges Eingreifen in die Nachricht dazu führt, dass „das Gleiche“ vorhanden ist, als wäre es nur einmal geschehen, liegt eine idempotente Änderung vor, die PUT zugeordnet werden sollte. Wenn nicht, wird POST zugeordnet. Wenn Sie dem Client niemals erlauben, URLs zu synthetisieren, kommt PUT Update ziemlich nahe und POST kann mit Create gut umgehen, aber das ist mit Sicherheit nicht die einzige Möglichkeit, wenn der Client das weiß Er möchte /foo/abc erstellen und weiß, welche Inhalte er dort ablegen soll. Als PUT funktioniert er einwandfrei.

Die kanonische Beschreibung eines POST ist, wenn Sie sich zum Kauf verpflichten: Dies ist eine Aktion, die niemand wiederholen möchte, ohne es zu wissen. Im Gegensatz dazu kann es sein, die Versandadresse für die Bestellung im Voraus festzulegen erledigt mit PUT ganz gut: Es spielt keine Rolle, ob Sie aufgefordert werden, einmal, zweimal oder hundertmal an 6 Anywhere Dr, Nowhereville zu senden: Es ist immer noch die gleiche Adresse. Bedeutet das, dass es sich um ein Update handelt? Alles hängt davon ab, wie Sie das Back-End schreiben möchten. (Beachten Sie, dass die Ergebnisse möglicherweise nicht identisch sind. Sie können dem Benutzer als Teil der Darstellung der Ressource melden, wann er das letzte Mal einen PUT durchgeführt hat. Dadurch wird sichergestellt, dass dieser Vorgang wiederholt wird PUTs führen nicht zu einem identischen Ergebnis, aber das Ergebnis wäre in funktionaler Hinsicht immer noch „dasselbe“.)

47
Donal Fellows

Ich habe nach der gleichen Antwort gesucht. Hier ist, was IBM sagt. IBM Link

POST            Creates a new resource.
GET             Retrieves a resource.
PUT             Updates an existing resource.
DELETE          Deletes a resource.
30
ex0b1t

Es gibt ein großartiges Youtube-Video von Stormpath, das dies erklärt. Die URL sollte zum richtigen Teil des Videos springen:

stormpath youtube video

Sehenswert ist auch, dass über eine Stunde geredet wird, aber es ist sehr interessant, wenn Sie darüber nachdenken, Zeit in den Aufbau einer REST -API zu investieren.

9
pleshy

Derzeit (2016) lauten die neuesten HTTP-Verben GET, POST, PATCH , PUT und DELETE

Überblick

  • HTTP GET - SELECT/Request
  • HTTP PUT - UPDATE
  • HTTP POST - INSERT/Create
  • HTTP PATCH - Wann [~ # ~] Put [~ # ~] Das Erstellen einer vollständigen Ressourcendarstellung ist umständlich und beansprucht mehr Bandbreite, z. B .: wenn Sie eine Spalte teilweise aktualisieren müssen
  • HTTP DELETE - LÖSCHEN

Hoffe das hilft!

Wenn Sie daran interessiert sind, REST APIs) zu entwerfen, ist dies eine gute Lektüre! Website-Online-Version github Repository

8
d1jhoni1b

Das hängt von der konkreten Situation ab. Aber im Allgemeinen:

PUT = Aktualisieren oder Ändern einer konkreten Ressource mit einem konkreten URI der Ressource.

POST = eine neue Ressource erstellen nter die Quelle der angegebenen URI.

Das heißt.

Blogbeitrag bearbeiten:

PUT:/blog/entry/1

Erstelle ein neues:

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 zur Implementierung mehrerer anderer Anwendungsfälle verwendet werden, die von den anderen nicht abgedeckt werden (GET, PUT, DELETE, HEAD, OPTIONS)

Das allgemeine Verständnis für CRUD-Systeme lautet GET = request, POST = create, Put = update, DELETE = delete

7
Stuck

Die Bausteine ​​von REST sind hauptsächlich die Ressourcen (und URI) und die Hypermedien. In diesem Zusammenhang ist GET der Weg, um eine Darstellung der Ressource zu erhalten (was in der Tat der Fall sein kann) CRUD-konform auf ein SELECT abgebildet werden).

Sie sollten jedoch nicht unbedingt eine Eins-zu-Eins-Zuordnung zwischen CRUD-Operationen und HTTP-Verben erwarten. Der Hauptunterschied zwischen PUT und POST liegt in ihrer idempotenten Eigenschaft. POST wird auch häufiger für Teilaktualisierungen verwendet, da PUT im Allgemeinen das Senden einer vollständigen neuen Darstellung der Ressource impliziert.

Ich würde vorschlagen, dies zu lesen:

Die HTTP-Spezifikation ist auch eine nützliche Referenz:

Die PUT-Methode fordert an, dass die eingeschlossene Entität unter dem angegebenen Request-URI gespeichert wird.

[...]

Der grundlegende Unterschied zwischen den Anforderungen POST und PUT) spiegelt sich in der unterschiedlichen Bedeutung der Anforderungs-URI wider. Die URI in einer Anforderung POST identifiziert die Ressource, die verwendet wird Diese Ressource kann ein datenakzeptierender Prozess, ein Gateway zu einem anderen Protokoll oder eine separate Entität sein, die Anmerkungen akzeptiert.Im Gegensatz dazu identifiziert der URI in einer PUT-Anforderung die der Anforderung beigefügte Entität - den Benutzer Der Agent weiß, welche URI vorgesehen ist, und der Server DARF NICHT versuchen, die Anforderung auf eine andere Ressource anzuwenden. Wenn der Server wünscht, dass die Anforderung auf eine andere URI angewendet wird,

4
Bruno

Im Allgemeinen ist dies das Muster, das ich benutze:

  • HTTP GET - SELECT/Request
  • HTTP PUT - UPDATE
  • HTTP POST - INSERT/Create
  • HTTP DELETE - LÖSCHEN
3
AJ.

Das Symfony -Projekt versucht, seine HTTP-Methoden mit CRUD-Methoden zu verknüpfen, und ihre Liste verknüpft sie wie folgt:

  • GET Ruft die Ressource vom Server ab
  • POST Erstellen Sie eine Ressource auf dem Server
  • PUT Aktualisieren Sie die Ressource auf dem Server
  • LÖSCHEN Löschen Sie die Ressource vom Server

Es ist erwähnenswert, dass, wie auf dieser Seite gesagt wird: "In Wirklichkeit unterstützen viele moderne Browser die Methoden PUT und DELETE nicht."

Soweit ich mich erinnere, "fälscht" Symfony PUT und DELETE für die Browser, die sie beim Generieren ihrer Formulare nicht unterstützen, um der theoretisch korrekten HTTP-Methode auch dann so nahe zu sein, wenn ein Browser sie nicht unterstützt es.

1
Matt Gibson