Ich habe mich gefragt, was die Leute von einer RESTful- PUT
Operation halten, die nichts (null) im Antworttext zurückgibt.
Ich habe mich gefragt, was die Leute von einer RESTful- PUT
Operation halten, die nichts (null) im Antworttext zurückgibt.
Antworten:
Die HTTP-Spezifikation ( RFC 2616 ) enthält eine Reihe von Empfehlungen, die anwendbar sind. Hier ist meine Interpretation:
200 OK
für eine erfolgreiche PUT eines Updates einer vorhandenen Ressource. Kein Antwortkörper erforderlich. (Pro Abschnitt 9.6 , 204 No Content
ist noch besser geeignet.)201 Created
für eine erfolgreiche PUT einer neuen Ressource, wobei der spezifischste URI für die neue Ressource im Feld Standortheader zurückgegeben wird und alle anderen relevanten URIs und Metadaten der Ressource im Antworttext wiedergegeben werden. ( RFC 2616 Abschnitt 10.2.2 )409 Conflict
für einen PUT , die aufgrund einer 3 nicht erfolgreich ist rd -Party Modifikation, mit einer Liste der Unterschiede zwischen der versuchten Aktualisierung und der aktuellen Ressource im Antworttext. ( RFC 2616 Abschnitt 10.4.10 )400 Bad Request
für eine nicht erfolgreiche PUT mit Text in natürlicher Sprache (z. B. Englisch) im Antworttext, der erklärt, warum die PUT fehlgeschlagen ist. ( RFC 2616 Abschnitt 10.4 )No response body needed
in Bezug auf eine 200 erwähnt wird. Tatsächlich wird der Antwortkörper in Bezug auf eine PUT überhaupt nicht erwähnt. Es heißt nurIf an existing resource is modified, either the 200 (OK) or 204 (No Content) response codes SHOULD be sent to indicate successful completion of the request.
Im Gegensatz zu den meisten Antworten hier denke ich tatsächlich, dass PUT die aktualisierte Ressource zurückgeben sollte (natürlich zusätzlich zum HTTP-Code).
Der Grund, warum Sie die Ressource als Antwort auf den PUT-Vorgang zurückgeben möchten, liegt darin, dass der Server beim Senden einer Ressourcendarstellung an den Server auch eine Verarbeitung auf diese Ressource anwenden kann, sodass der Client wissen möchte, wie diese Ressource funktioniert Es sieht so aus, als ob die Anfrage erfolgreich abgeschlossen wurde. (Andernfalls muss eine weitere GET-Anforderung ausgegeben werden.)
Ich denke, es ist für den Server möglich, Inhalte als Antwort auf einen PUT zurückzugeben. Wenn Sie ein Antwortumschlagformat verwenden, das seitlich geladene Daten zulässt (z. B. das von Glutdaten verwendete Format), können Sie auch andere Objekte einschließen, die möglicherweise über Datenbankauslöser usw. geändert wurden (seitlich geladene Daten werden explizit reduziert Anzahl der Anfragen, und dies scheint ein guter Ort zur Optimierung zu sein.)
Wenn ich nur den PUT akzeptiere und nichts zu melden habe, verwende ich den Statuscode 204 ohne Text. Wenn ich etwas zu melden habe, verwende ich den Statuscode 200 und füge einen Text hinzu.
Die HTTP / 1.1-Spezifikation (Abschnitt 9.6) werden die entsprechenden Antwort- / Fehlercodes erläutert. Der Antwortinhalt wird jedoch nicht behandelt.
Was würden Sie erwarten? Ein einfacher HTTP-Antwortcode (200 usw.) erscheint mir unkompliziert und eindeutig.
Wenn das Backend der REST-API eine relationale SQL-Datenbank ist, dann
Wenn Sie sich nicht für verlorene Updates interessieren oder Ihre Clients dazu zwingen möchten, unmittelbar nach einem PUT ein GET durchzuführen, geben Sie nichts vom PUT zurück.
HTTP-Antwortcode 201 für "Erstellt" zusammen mit einem "Standort" -Header, der angibt, wo der Client die neu erstellte Ressource finden kann.
Ich habe die RESTful-API in meinen Diensten verwendet, und hier ist meine Meinung: Zuerst müssen wir zu einer gemeinsamen Ansicht gelangen: PUT
Wird verwendet, um eine Ressource zu aktualisieren, die nicht erstellt oder abgerufen wurde.
Ich habe Ressourcen definiert mit: Stateless resource
und Stateful resource
:
Statuslose Ressourcen Für diese Ressourcen ist es ausreichend, den HttpCode mit leerem Text zurückzugeben.
Stateful Resources Zum Beispiel: die Version der Ressource. Für diese Art von Ressourcen müssen Sie die Version angeben, wenn Sie sie ändern möchten. Geben Sie daher die vollständige Ressource zurück oder geben Sie die Version an den Client zurück, damit der Client nach der Aktualisierungsaktion keine Abrufanforderung senden muss.
Aber , für einen Dienst oderSystem, haltenessimple
,clearly
,easy to use and maintain
ist das Wichtigste.
So wie ein leerer Anfragetext dem ursprünglichen Zweck einer GET-Anforderung entspricht und ein leerer Antworttext dem ursprünglichen Zweck einer PUT-Anforderung entspricht.
scheint in Ordnung zu sein ... obwohl ich denke, ein rudimentärer Hinweis auf Erfolg / Misserfolg / Zeitangabe / # empfangene Bytes / etc. wäre vorzuziehen.
Bearbeiten: Ich habe im Sinne von Datenintegrität und / oder Aufzeichnungen gedacht. Metadaten wie ein MD5-Hash oder ein Zeitstempel für die empfangene Zeit können für große Datendateien hilfreich sein.
Im Idealfall wird eine Erfolgs- / Fehlerantwort zurückgegeben.
Es gibt einen Unterschied zwischen dem Header und dem Text einer HTTP-Antwort. PUT sollte niemals einen Body zurückgeben, sondern muss einen Antwortcode im Header zurückgeben. Wählen Sie einfach 200, wenn es erfolgreich war, und 4xx, wenn nicht. Es gibt keinen Null-Rückkehrcode. Warum willst du das tun?
200
PUT, DELETE oder einer anderen Methode ausdrücklich ausschließt . Habe ich etwas verpasst? Wie Mozilla wird der Chef von W3 und der IETF? ;) Oder vielleicht haben sie noch nie von Postels Robustheitsprinzip gehört.