it-swarm.com.de

Welche REST PUT / POST / DELETE-Aufrufe sollten durch eine Konvention zurückgegeben werden?

  1. Was sollte laut "REST-Ideologie" im Antworttext für PUT/POST/DELETE-Anforderungen sein?

  2. Was ist mit Rückkehrcodes? Ist HTTP_OK genug?

  3. Was ist der Grund für solche Konventionen, wenn überhaupt?

Ich habe einen guten Beitrag gefunden, der die POST/PUT-Unterschiede beschreibt: POST vs PUT Aber meine Frage wird immer noch nicht beantwortet.

150
tuxSlayer

Vergib das Flippancy, aber wenn du REST über HTTP machst, dann RFC7231 beschreibt genau, welches Verhalten von GET, PUT, POST) erwartet wird = und DELETE.

Update (3. Juli 14):
Die HTTP-Spezifikation definiert absichtlich nicht, was von POST oder DELETE) zurückgegeben wird. Die Spezifikation definiert nur, was definiert werden muss. Der Rest bleibt dem Implementierer überlassen.

129
Darrel Miller

Insgesamt lauten die Konventionen "denken Sie, Sie liefern nur Webseiten".

Bei einem PUT würde ich die gleiche Ansicht zurückgeben, die Sie erhalten würden, wenn Sie unmittelbar danach ein GET durchführen würden. das würde 200 ergeben (vorausgesetzt, das Rendern ist natürlich erfolgreich). Für einen POST würde ich eine Umleitung zu der erstellten Ressource durchführen (vorausgesetzt, Sie führen einen Erstellungsvorgang durch; andernfalls geben Sie einfach die Ergebnisse zurück). Der Code für eine erfolgreiche Erstellung ist ein 201, der eigentlich der einzige HTTP-Code für eine Umleitung ist, der nicht im 300-Bereich liegt.

Ich habe mich noch nie darüber gefreut, was ein DELETE zurückgeben soll (mein Code erzeugt derzeit ein HTTP 204 und in diesem Fall einen leeren Body).

25
Donal Fellows

Das Erstellen einer Ressource wird im Allgemeinen dem POST zugeordnet. Dabei sollte der Speicherort der neuen Ressource zurückgegeben werden. Beispiel: In einem Rails Gerüst leitet ein CREATE für die neu erstellte Ressource zur SHOW um. Der gleiche Ansatz ist möglicherweise für die Aktualisierung (PUT) sinnvoll, aber dies ist weniger eine Konvention, sondern eine Aktualisierung Erfolg muss nur angegeben werden. Ein Löschen muss wahrscheinlich auch nur angegeben werden. Wenn Sie umleiten möchten, ist die Rückgabe der Ressourcenliste wahrscheinlich am sinnvollsten.

Erfolg kann durch HTTP_OK angezeigt werden, ja.

Die einzige verbindliche Regel in dem, was ich oben gesagt habe, ist, dass eine ERSTELLUNG den Speicherort der neuen Ressource zurückgeben sollte. Das scheint mir ein Kinderspiel zu sein; Es macht durchaus Sinn, dass der Kunde auf den neuen Artikel zugreifen kann.

3
Jacob Mattison

Beim RFC7231 spielt es keine Rolle und kann leer sein

So implementieren wir eine auf dem json api-Standard basierende Lösung in das Projekt:

post/put: gibt Objektattribute wie in get aus (Feldfilter/Relationen gelten gleich)

delete: Daten enthalten nur null (für die Darstellung eines fehlenden Objekts)

status für Standardlöschung: 200

1
Marius Gri