Ідея полягає в тому, що орган реагування надає вам сторінку, яка посилає вас на річ:
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
Орган реагування
Потім вони згадують, що слід включити до органу реагування :
Навантаження на відповідь 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="https://stackoverflow.com/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="https://stackoverflow.com/a/36373586/12597">here</A> to view it.
І ETag
s - суто довільні значення. Важливо, щоб вони відрізнялися, коли змінився ресурс (а кеші потрібно оновлювати) - це все, що має значення. ETag - це зазвичай хеш (наприклад, SHA2). Але це може бути база даних rowversion
або збільшення ревізійного номера. Все, що зміниться, коли річ зміниться.