Muss ich verletzen und Erholung bei der Verwendung von POST als UPDATE ODER ERSTELLEN

Unter der Voraussetzung die anderen Abteilungen haben für unsere REST-API, die Sie verwenden möchten POST nicht nur für SCHAFFEN aber für AKTUALISIEREN ODER zu ERSTELLEN. Ich weiß, in einer RESTful API PUT könnte oder sollte dafür genutzt werden, aber da Kunden Informationen zu aktualisieren, die verwendet wird, um die URI, die wir nicht verwenden können, dass. Es würde den URI nur ändern, und machen PUT nicht idempotent mehr... (die alte URI würde nicht existieren, nachdem die ersten PUT).

tl;dr wir nicht verwenden können, SETZEN

In der HTTP/1.1 Spezifikationen POST ist definiert als

Die POST-Methode wird verwendet, um anzufordern, dass der Ursprungs-server akzeptieren, die
Person eingeschlossen in der Anforderung als eine neue untergeordnete der Ressource, die
identifiziert durch die Request-URI

aber auch

Die Aktion, die von der POST-Methode möglicherweise nicht in eine Ressource
werden können, identifiziert durch eine URI.

Aufenthalt Erholsam, ich würde erklären, die update-Funktion als eine Löschung der alten element und dann eine Kreation der neuen, das wäre eine akzeptable Funktionalität für POST würde ich sagen.

Würden wir zurückkehren eine #201 wenn Erstellung erfolgreich war und eine #200 wenn es nur ein update.


In unserer API ist es "möglich", um das richtige element, ohne die URI (z.B. für die Aktualisierung mit POST), weil alle das URI-Gebäude primary key Teile sind in der Ressource Körper, so dass die API-weiß, welches element den client zugreifen will.


Beispiel

(Dies ist nur ein Beispiel für das Verhalten für POST. Nicht für die Daten, die Struktur der Ressource. Natürlich mit PUT wäre vollkommen richtig, für /cars/)

POST /cars/HTTP/1.1
<car>
    <id>7</id>
    <status>broken</status>
</car>

Antwort: #201

und dann

POST /cars/HTTP/1.1
<car>
    <id>7</id>
    <status>fine</status>
</car>

Antwort: #200

jetzt eine GET auf /cars/7 würde Folgendes zurück:

<car>
    <id>7</id>
    <status>fine</status>
</car>
  • Ich habe gerade gelöscht, mein ursprüngliche Kommentar nach einem Blick auf Ihr Beispiel, Ihre Transaktion zu sein scheint idempotent. Sie setzen den status von Auto-7 in Ordnung zu sein. Wenn Sie erneut diese Methode wieder und wieder, dann würden Sie noch am Ende mit dem gleichen Ergebnis. Deshalb gibt es keinen guten Grund, dass dieses spezielle Beispiel nicht sein konnte, eine PUT-Methode.
  • Diese Antwort Abdeckungen SETZEN v POST die besten, die ich fühle. Wenn Ihre Aktion ist idempotent, dann verwenden Sie PUT-zu verwenden, ansonsten POST.
  • Ich denke, dein Erster Kommentar war einfach nur gut. Das Beispiel war nur für das Verhalten (Hinzugefügt, dass auf die Frage). Sorry für die Ungenauigkeit! :/ Ich sah auch die Antwort, die Sie verweisen, aber leider ist es nicht wirklich gute Quellen (die PDF ist nicht wirklich hilfreich). Btu Kommentar zu deinem letzten statement Meinen BEITRAG (mit Aktualisieren oder Erstellen) Sie ist jetzt ein bisschen indempotent, da ruft es wieder und wieder in den gleichen Datenbestand. Die Erstellung dieser idempotenz mit PUT scheint unmöglich für meine Lösung (da sich der uri ändert)
InformationsquelleAutor Robert | 2014-09-18
Schreibe einen Kommentar