200
Ugh ... (309, 400, 403, 409, 415, 422) ... banyak jawaban yang mencoba menerka, memperdebatkan dan membakukan apa kode pengembalian terbaik untuk permintaan HTTP yang berhasil tetapi panggilan REST gagal. .
Adalah salah untuk mencampur kode status HTTP dan kode status REST.
Namun, saya melihat banyak implementasi yang memadukannya, dan banyak pengembang mungkin tidak setuju dengan saya.
Kode pengembalian HTTP terkait dengan HTTP Request
itu sendiri. Panggilan REST dilakukan menggunakan permintaan Hypertext Transfer Protocol dan berfungsi pada tingkat yang lebih rendah daripada metode REST yang dipanggil itu sendiri. REST adalah konsep / pendekatan, dan outputnya adalah hasil bisnis / logis , sedangkan kode hasil HTTP adalah transportasi .
Misalnya, mengembalikan "404 Tidak ditemukan" ketika Anda memanggil / pengguna / bingung, karena itu dapat berarti:
- URI salah (HTTP)
- Tidak ada pengguna yang ditemukan (REST)
"403 Dilarang / Akses Ditolak" dapat berarti:
- Diperlukan izin khusus. Browser dapat menanganinya dengan menanyakan pengguna / kata sandi. (HTTP)
- Izin akses yang salah dikonfigurasi di server. (HTTP)
- Anda perlu diautentikasi (REST)
Dan daftar tersebut dapat berlanjut dengan '500 Server error "(kesalahan Apache / Nginx HTTP dilemparkan atau kesalahan kendala bisnis di REST) atau kesalahan HTTP lainnya dll ...
Dari kode, sulit untuk memahami apa yang menjadi alasan kegagalan, kegagalan HTTP (transportasi) atau kegagalan REST (logis).
Jika permintaan HTTP berhasil dilakukan secara fisik, ia harus selalu mengembalikan 200 kode, terlepas dari apakah catatan ditemukan atau tidak. Karena sumber daya URI ditemukan dan ditangani oleh server HTTP. Ya, itu mungkin mengembalikan set kosong. Apakah mungkin untuk menerima halaman web kosong dengan 200 sebagai hasil HTTP, kan?
Alih-alih ini, Anda dapat mengembalikan 200 kode HTTP dengan beberapa opsi:
- "error" objek dalam hasil JSON jika terjadi kesalahan
- Kosongkan array / objek JSON jika tidak ada catatan yang ditemukan
- Bendera hasil / keberhasilan bool dalam kombinasi dengan opsi sebelumnya untuk penanganan yang lebih baik.
Juga, beberapa penyedia internet dapat mencegat permintaan Anda dan mengembalikan Anda kode HTTP 404. Ini tidak berarti bahwa data Anda tidak ditemukan, tetapi ada sesuatu yang salah pada tingkat transportasi.
Dari Wiki :
Pada Juli 2004, penyedia telekomunikasi Inggris BT Group menyebarkan sistem pemblokiran konten Cleanfeed, yang mengembalikan kesalahan 404 untuk setiap permintaan konten yang diidentifikasi berpotensi ilegal oleh Internet Watch Foundation. ISP lain mengembalikan kesalahan HTTP 403 "dilarang" dalam keadaan yang sama. Praktek mempekerjakan 404 kesalahan palsu sebagai cara untuk menyembunyikan sensor juga telah dilaporkan di Thailand dan Tunisia. Di Tunisia, di mana sensor sangat keras sebelum revolusi 2011, orang-orang menjadi sadar akan sifat kesalahan 404 palsu dan menciptakan karakter imajiner bernama "Ammar 404" yang mewakili "sensor tak terlihat".
Kenapa tidak jawab saja dengan sesuatu seperti ini?
{
"result": false,
"error": {"code": 102, "message": "Validation failed: Wrong NAME."}
}
Google selalu mengembalikan 200 sebagai kode status di Geocoding API mereka, meskipun permintaan gagal secara logis: https://developers.google.com/maps/documentation/geocoding/intro#StatusCodes
Facebook selalu mengembalikan 200 untuk permintaan HTTP yang berhasil, bahkan jika permintaan REST gagal: https://developers.facebook.com/docs/graph-api/using-graph-api/error-handling
Sederhana, kode status HTTP adalah untuk permintaan HTTP. REST API adalah milik Anda, tentukan kode status Anda.