Идея состоит в том, что тело ответа дает вам страницу, которая связывает вас с этим:
201 Создано
Код состояния 201
(Создан) указывает, что запрос был выполнен и привел к созданию одного или нескольких новых ресурсов. Первичный ресурс, созданный запросом, идентифицируется либо полем заголовка Location
в ответе, либо, если поле Location
не получено, действующим URI запроса.
Это означает, что вы должны включить Location
в заголовок ответа, который дает URL-адрес, по которому вы можете найти только что созданный объект:
HTTP/1.1 201 Created
Date: Sat, 02 Apr 2016 12:22:40 GMT
Location: http://stackoverflow.com/a/36373586/12597
Тело ответа
Затем они упоминают, что вы должны включить в ответ body:
Полезные данные ответа 201
обычно описывают созданные ресурсы и ссылаются на них.
Человеку, использующему браузер, вы даете ему то, на что он может взглянуть, и щелкаете мышью, чтобы перейти к вновь созданному ресурсу:
HTTP/1.1 201 Created
Date: Sat, 02 Apr 2016 12:22:40 GMT
Location: http://stackoverflow.com/a/36373586/12597
Content-Type: text/html
Your answer has been saved!
Click <A href="/a/36373586/12597">here</A> to view it.
Если страница будет использоваться только роботом, имеет смысл сделать так, чтобы ответ был машиночитаемым:
HTTP/1.1 201 Created
Date: Sat, 02 Apr 2016 12:22:40 GMT
Location: http://stackoverflow.com/a/36373586/12597
Content-Type: application/xml
<createdResources>
<questionID>1860645</questionID>
<answerID>36373586</answerID>
<primary>/a/36373586/12597</primary>
<additional>
<resource>http://stackoverflow.com/questions/1860645/create-request-with-post-which-response-codes-200-or-201-and-content/36373586#36373586</resource>
<resource>http://stackoverflow.com/a/1962757/12597</resource>
</additional>
</createdResource>
Или, если хотите:
HTTP/1.1 201 Created
Date: Sat, 02 Apr 2016 12:22:40 GMT
Location: http://stackoverflow.com/a/36373586/12597
Content-Type: application/json
{
"questionID": 1860645,
"answerID": 36373586,
"primary": "/a/36373586/12597",
"additional": [
"http://stackoverflow.com/questions/1860645/create-request-with-post-which-response-codes-200-or-201-and-content/36373586#36373586",
"http://stackoverflow.com/a/36373586/12597"
]
}
Ответ полностью зависит от вас; это произвольно, что вы хотите.
Дружественный к кешу
Наконец, есть оптимизация, заключающаяся в том, что я могу предварительно кэшировать созданный ресурс (потому что у меня уже есть контент; я только что загрузил его). Сервер может вернуть дату или ETag
, которые я могу сохранить вместе с только что загруженным мной контентом:
См. раздел 7.2 для обсуждения значения и цели полей заголовка валидатора, таких как как ETag
и Last-Modified
в ответе 201
.
HTTP/1.1 201 Created
Date: Sat, 02 Apr 2016 12:22:40 GMT
Location: http://stackoverflow.com/a/23704283/12597
Content-Type: text/html
ETag: JF2CA53BOMQGU5LTOQQGC3RAMV4GC3LQNRSS4
Last-Modified: Sat, 02 Apr 2016 12:22:39 GMT
Your answer has been saved!
Click <A href="/a/36373586/12597">here</A> to view it.
А ETag
- чисто произвольные значения. Все, что имеет значение, - это их отличия при изменении ресурса (и необходимости обновления кешей). ETag
обычно является хешем (например, SHA2-256). Но это может быть база данных rowversion
или увеличивающийся номер версии. Все, что изменится, когда вещь изменится.
person
Ian Boyd
schedule
02.04.2016