Richtige Antwort für eine REST-Einfügung - vollständiger neuer Datensatz oder nur der Datensatz-ID-Wert?

15

Ich erstelle eine REST-API, die Einfügungen (POST, nicht idempotent) und Aktualisierungen (PUT, idempotent) zum Hinzufügen / Aktualisieren der Datenbank zu unserer Anwendung zulässt.

Ich frage mich, ob es Standards oder Best Practices dafür gibt, welche Daten wir in der Antwort auf eine POST-Operation (Einfügen) an den Client zurücksenden. Wir müssen mindestens einen Datensatz-ID-Wert zurücksenden (z. B. Ihr neuer Datensatz ist Datensatz Nr. 1234).

Sollen wir mit dem vollständigen Objekt antworten? (zB im Wesentlichen dieselbe Antwort, die sie von einer "GET / object_type / 1234" -Anforderung erhalten würden)

Sollen wir nur mit dem neuen ID-Wert antworten? (z. B. "{id: 1234}", dh, wenn der gesamte Datensatz abgerufen werden soll, muss eine zusätzliche HTTP-GET-Anforderung ausgeführt werden, um den vollständigen Datensatz abzurufen.)

Ein Redirect-Header, der auf die URL für das gesamte Objekt verweist?

Etwas ganz anderes?

Keith Palmer Jr.
quelle
Ich bin oot sicher beste Praxis aber für mich persönlich würde ich wahrscheinlich denken Sie nur die neu erstellte ID zurückkehren , wenn erfolgreich sonst -1 usw. interessiert sein zu sehen , was andere sagen , obwohl
dreza

Antworten:

13

Nun, in einer REST-Schnittstelle, die, wo immer möglich, HTTP folgt, würde ich eine 201 und eine URI im Location-Header-Feld an die neu erstellte Ressource zurückgeben. Hier ist, was Statuscode-Definitionen sagen:

10.2.2 201 Erstellt

Die Anforderung wurde erfüllt und führte dazu, dass eine neue Ressource erstellt wurde. Auf die neu erstellte Ressource kann von den in der Entität der Antwort zurückgegebenen URI (s) verwiesen werden, wobei der spezifischste URI für die Ressource in einem Standortheaderfeld angegeben ist. Die Antwort MUSS eine Entität enthalten, die eine Liste von Ressourcenmerkmalen und Speicherorten enthält, aus denen der Benutzer oder Benutzeragent den am besten geeigneten auswählen kann. Das Entitätsformat wird durch den Medientyp bestimmt, der im Feld Inhaltstyp angegeben ist. Der Ursprungsserver MUSS die Ressource erstellen, bevor der 201-Statuscode zurückgegeben wird. Wenn die Aktion nicht sofort ausgeführt werden kann, MUSS der Server stattdessen mit 202 (Accepted) antworten.

Wenn etwas schief gelaufen ist, sollten Sie nicht zurückkehren, -1wie andere gesagt haben, sondern einfach einen Client- oder Server-Fehlercode (4xx oder 5xx). Wenn ein Benutzer beispielsweise keine neue Ressource erstellen darf, geben Sie einfach "401 Unauthorized" zurück, nicht mehr und nicht weniger.

Bruno Schäpper
quelle
Was ist mit dem Körper? leer oder das gesamte neu erstellte Objekt als Antwort?
Entwickler
Zwei gebräuchliche Optionen, die ich kenne, sind: 1) Setzen des Orts-Headers auf den Ort, an dem die neue Entität gefunden werden kann, oder 2) Einbeziehen der neuen Entität in den Körper. Ich persönlich gehe mit letzterem aus praktischen Gründen. Manchmal kombiniert für ein ruhigeres Gefühl;)
Bruno Schäpper