Idenya adalah bahwa respons tubuh memberi Anda halaman yang menghubungkan Anda ke hal tersebut:
201 Dibuat
Kode status 201 (Dibuat) menunjukkan bahwa permintaan telah dipenuhi dan menghasilkan satu atau lebih sumber daya baru yang dibuat. Sumber daya utama yang dibuat oleh permintaan diidentifikasi oleh bidang header Lokasi dalam respons atau, jika tidak ada bidang Lokasi yang diterima, oleh URI permintaan yang efektif.
Ini berarti bahwa Anda akan mencakup Location
dalam respon sundulan yang memberikan URL dari mana Anda dapat menemukan yang baru dibuat hal :
HTTP/1.1 201 Created
Date: Sat, 02 Apr 2016 12:22:40 GMT
Location: http://stackoverflow.com/a/36373586/12597
Tubuh respon
Mereka kemudian melanjutkan dengan menyebutkan apa yang harus Anda sertakan dalam badan tanggapan :
Payload respons 201 biasanya mendeskripsikan dan menautkan ke resource yang dibuat.
Untuk manusia yang menggunakan browser, Anda memberi mereka sesuatu yang dapat mereka lihat, dan klik, untuk mendapatkan sumber daya yang baru mereka buat:
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.
Jika laman tersebut hanya akan digunakan oleh robot, masuk akal untuk memiliki respons yang dapat dibaca oleh komputer:
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>
Atau, jika Anda lebih suka:
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"
]
}
Tanggapan sepenuhnya terserah Anda; itu sesuka Anda.
Ramah cache
Akhirnya ada pengoptimalan bahwa saya dapat melakukan pra-cache sumber daya yang dibuat (karena saya sudah memiliki konten; saya baru saja mengunggahnya). Server dapat mengembalikan tanggal atau ETag yang dapat saya simpan dengan konten yang baru saya unggah:
Lihat Bagian 7.2 untuk diskusi tentang arti dan tujuan bidang header validator, seperti ETag dan Last-Modified, dalam respons 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.
Dan ETag
s adalah nilai yang murni sewenang-wenang. Membuatnya berbeda ketika sumber daya berubah (dan cache perlu diperbarui) adalah yang terpenting. ETag biasanya berupa hash (misalnya SHA2). Tapi itu bisa berupa database rowversion
, atau nomor revisi yang bertambah. Apa pun yang akan berubah saat hal itu berubah.