Mungkin terlambat bermain, tetapi saya menemukan masalah semantik ini ketika mencoba membuat REST API.
Untuk sedikit memperluas jawaban Wrikken, saya pikir Anda dapat menggunakan salah satu 409 Conflict
atau 403 Forbidden
bergantung pada situasinya - singkatnya, gunakan kesalahan 403 ketika pengguna sama sekali tidak dapat menyelesaikan konflik dan menyelesaikan permintaan (mis. Mereka tidak dapat mengirim DELETE
meminta untuk menghapus sumber daya secara eksplisit), atau menggunakan 409 jika sesuatu dapat dilakukan.
Server mengerti permintaan itu, tetapi menolak untuk memenuhinya. Otorisasi tidak akan membantu dan permintaan TIDAK HARUS diulang. Jika metode permintaan itu bukan KEPALA dan server ingin mengumumkan kepada publik mengapa permintaan itu belum dipenuhi, itu HARUS menggambarkan alasan penolakan di entitas. Jika server tidak ingin membuat informasi ini tersedia untuk klien, kode status 404 (Tidak Ditemukan) dapat digunakan sebagai gantinya.
Saat ini, seseorang mengatakan "403" dan masalah izin atau otentikasi muncul di benak, tetapi spek itu mengatakan bahwa pada dasarnya server memberi tahu klien bahwa itu tidak akan melakukannya, jangan tanya lagi, dan inilah mengapa klien tidak boleh 't.
Adapun PUT
vs. POST
... POST
harus digunakan untuk membuat instance baru dari sumber daya ketika pengguna tidak memiliki cara untuk atau tidak seharusnya membuat pengidentifikasi untuk sumber daya. PUT
digunakan ketika identitas sumber daya diketahui.
...
Perbedaan mendasar antara permintaan POST dan PUT tercermin dalam arti berbeda dari Request-URI. URI dalam permintaan POST mengidentifikasi sumber daya yang akan menangani entitas terlampir. Sumber daya itu bisa berupa proses penerimaan data, gateway ke beberapa protokol lain, atau entitas terpisah yang menerima anotasi. Sebaliknya, URI dalam permintaan PUT mengidentifikasi entitas yang dilampirkan dengan permintaan - agen pengguna tahu apa yang dimaksud dengan URI dan server TIDAK HARUS mencoba menerapkan permintaan tersebut ke sumber daya lain. Jika server ingin agar permintaan diterapkan ke URI yang berbeda,
itu HARUS mengirim respons 301 (Dipindahkan Secara Permanen); agen pengguna MUNGKIN kemudian membuat keputusan sendiri mengenai apakah akan mengarahkan permintaan atau tidak.