REST-Antwort - soll ich die URL-Adresse der neuen Ressource in die Kopf, Körper, oder beides?
Ich haben zusammen eine API, die eine Antwort auf eine POST-Anforderung, indem die Inhalte der neuen Ressource im response-body, und die URL-Adresse der neuen Ressource in der Lage, HTTP-Antwort-header.
Beispiel-Anfrage:
POST /api/v1/widgets HTTP/1.1
Content-type: application/json;
Accept: application/json;
{
"name": "[email protected]",
"price": "10",
}
Beispiel-Antwort:
HTTP 201 Created
Location: http://example.com/api/v1/widgets/123456
{
'widget':
{
'id': "123456",
'created': "2012-06-22T12:43:37+0100",
'name': "[email protected]",
'price': "10",
},
}
Jemand hat ein Problem angesprochen, dass die URL sollte auch in den Text der Antwort. Gibt es eine best practice?
(Fühlen Sie sich frei, um zu töten, wenn es zu subjektiv, nicht sicher, ob dies gegen den Geist der SO oder SO nicht)
InformationsquelleAutor Hugo Rodger-Brown | 2012-06-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde Sie in den header (Location: http://blah.blah.com/blah). Sie könnten es in Ihrem Körper auch, wenn du willst (in was auch immer entsprechende format, die Sie senden), und es wäre nicht unpassend.
Den atompub-REST-API ist in der Regel eine gute Referenz für eine gute REST-API. Legen Sie es in beiden.
Ja, aber beachten Sie, dass die URI in dem Beispiel zurückgegeben Körper von AtomPub oben gezeigt wird, ist tatsächlich ein link, der sagt dem Empfänger, was URI zu verwenden, wenn Sie möchten, "Bearbeiten", der Ressource (nach dem HATEOAS-Prinzip). Es ist nicht, streng genommen, unbedingt das gleiche wie URI der Ressource selbst (d.h. nicht notwendigerweise der gleiche wie der Wert in der Lage: - header, der sagt, wo könnte man das Ressource). Es passiert, dass in diesem Beispiel die URI, um die Ressourcen-und die, die man verwendet, Bearbeiten Sie die Ressource ist die gleiche.
Okay, gut zu wissen. Ich hatte angenommen, Sie würde immer das gleiche. Die OP sollte diese berücksichtigt.
InformationsquelleAutor smcg
Gibt es einen Grund, für nicht setzen Sie den Speicherort (URL) der neu erstellten Ressource) in den Körper: die URL ist die URL der Metadaten, die erforderlich für die Meldung der Interaktion zwischen service-Consumer und service-Dienste, es ist nicht "business data". Es ist eine SOA Design Pattern " genannt "Messaging-Metadaten" , deutet darauf hin, dass URLs, Anmeldeinformationen, Korrelations-IDS, die Transaktions-IDs und andere messaging-Zusammensetzung und-Kontext-Daten platziert werden soll in den Header, nicht in den Hauptteil der Nachrichten. In der Tat, http bietet bereits der standard-header-Location.
OTOH, wenn Ihr REST-Dienst verwendet HATEOAS die Antwort enthält möglicherweise eine oder mehrere URLs, die direkten links zu den Operationen, die Sie anbieten wollen, für die Verbraucher, um dynamisch zu binden und zu rufen.
Denke ich, dass die URL in der Kopf-und der Körper ist die schlechteste Lösung. Redundante Daten ist anfällig für Inkonsistenzen in der langfristig.
InformationsquelleAutor Paulo Merson