Saya memiliki titik akhir berikut:
a/{id}/b
dan ingin membuat b
dengan mengirim POST
permintaan padanya. Jika a
dengan diberikan {id}
tidak ditemukan haruskah saya merespons 404 NOT_FOUND
atau mungkin dengan 409 CONFLICT
?
Ini untuk menangani secara sederhana a/{id}
, masalahnya adalah bahwa di sini sumber daya digunakan.
rest
api
api-design
http-request
Opal
sumber
sumber
Jawaban:
404 NOT FOUND
tampaknya respons yang sesuai, karena sumber daya dengan ID ini tidak ada. Sangat jelas untuk dipahami dan Anda mengharapkan respons yang sama jikaa/{id}
dipanggil.409 CONFLICT
menurut saya bukan pilihan yang lebih baik, karena dalam contoh Anda, Anda akan mengembalikan 409 ketika sumber daya induk tidak ditemukan :).Tetapi ingat bahwa hal yang paling penting adalah konsisten dalam API Anda
sumber
id
), adalah 404. Tetapi jika folder itu diteruskan dalam tubuh ini bisa menjadi hal lain (412, 422 ... sesuatu untuk mewakili "validasi gagal: folder tidak tidak ada"). Ini pertanyaan yang bagus untuk ditanyakan dan didiskusikan.Selain jawaban @ Dherik.
URI adalah pengidentifikasi , jadi kita harus ingat bahwa (
/a/{id}/b
adalah pengidentifikasi). The URI ada artinya untuk WWW, dan begitu juga untuk klien HTTP.404 adalah jawaban yang tepat . Intinya, server menjawab
Apakah sumber daya yang hilang adalah orang tua atau anak tidak masalah.
Kami, pengembang, melihat hierarki dan jalur di URI, tetapi klien HTTP tidak. Dengan kata lain, HTTP hanya dimaksudkan untuk ditafsirkan oleh klien HTTP tetapi tidak oleh manusia (devs, pengguna akhir, dll).
Jika ragu, jangan tanya kode apa yang masuk akal untuk Anda (manusia). Tanyakan, kode apa yang masuk akal untuk klien HTTP. Bagaimana Anda ingin klien HTTP berperilaku?
Mengapa? Karena beberapa kode status menyebabkan klien ini melakukan operasi tertentu. Misalnya, 302 . Kode ini biasanya membuat browser web untuk mengarahkan ulang ke lokasi tertentu (URI) yang diinformasikan dalam header respons.
Ini mungkin bukan kasus Anda, tetapi penting untuk diperhatikan. Pada akhirnya, kode status HTTP ditujukan ke klien HTTP. Tidak untuk aplikasi kita. Bukan untuk orang.
1: 409 jarang diimplementasikan sebagai kesalahan navigasi. Biasanya melibatkan pelaksanaan operasi jarak jauh (hapus, perbarui, baru, dll). Tetapi URI harus ada. Kalau tidak, 404 akan menang
sumber