Create Request with Post, Which Response Codes 200 or 201 and Content
Suppose I Write a Rest Service Whose Intent Is to Add a New Data Item to a System. I Plan to Post to Suppose That Works, What Response Code Should I Use? and...
Suppose I write a REST service whose intent is to add a new data item to a system.
I plan to POST to
Suppose that works, what response code should I use? And what content might I return.
I'm looking at the definitions of HTTP response codes and see these possibilities:
200: Return an entity describing or containing the result of the action;
201: which means CREATED. Meaning *The request has been fulfilled and resulted in a new resource being created. The newly created resource can be referenced by the URI(s) returned in the entity of the response, with the most specific URI for the resource given by a Location header field. The response SHOULD include an entity containing a list of resource characteristics and location(s) from which the user or user agent can choose the one most appropriate. The entity format is specified by the media type given in the Content-Type header field. *
The latter sounds more in line with the Http spec, but I'm not at all clear what
The response SHOULD include an entity containing a list of resource characteristics and location(s)
means.
Recommendations? Interpretations?
7 Answers
The idea is that the response body gives you a page that links you to the thing:
201 Created
The
201(Created) status code indicates that the request has been fulfilled and has resulted in one or more new resources being created. The primary resource created by the request is identified by either aLocationheader field in the response or, if noLocationfield is received, by the effective request URI.
This means that you would include a Location in the response header that gives the URL of where you can find the newly created thing:
HTTP/1.1 201 Created
Date: Sat, 02 Apr 2016 12:22:40 GMT
Location:
Response body
They then go on to mention what you should include in the response body:
The
201response payload typically describes and links to the resource(s) created.
For the human using the browser, you give them something they can look at, and click, to get to their newly created resource:
HTTP/1.1 201 Created
Date: Sat, 02 Apr 2016 12:22:40 GMT
Location:
Content-Type: text/html
Your answer has been saved!
Click <A href="/a/36373586/12597">here</A> to view it.
If the page will only be used by a robot, the it makes sense to have the response be computer readable:
HTTP/1.1 201 Created
Date: Sat, 02 Apr 2016 12:22:40 GMT
Location:
Content-Type: application/xml
<createdResources>
<questionID>1860645</questionID>
<answerID>36373586</answerID>
<primary>/a/36373586/12597</primary>
<additional>
<resource>
<resource>
</additional>
</createdResource>
Or, if you prefer:
HTTP/1.1 201 Created
Date: Sat, 02 Apr 2016 12:22:40 GMT
Location:
Content-Type: application/json
{
"questionID": 1860645,
"answerID": 36373586,
"primary": "/a/36373586/12597",
"additional": [
"",
""
]
}
The response is entirely up to you; it's arbitrarily what you'd like.