Layanan kami ada di 5 kota sekarang. Jika seseorang mencoba memanggil API layanan kami dari kota lain, kami ingin membuang kesalahan ini Service not available in your area
.
Pertanyaannya adalah, apa kode http yang sesuai untuk kesalahan ini?
- 503 Layanan tidak tersedia
- 403: Dilarang
atau sesuatu yang lain?
api
api-design
http
Shaharyar
sumber
sumber
Jawaban:
Kode kesalahan HTTP apa pun tidak pantas. Tidak ada kesalahan atau masalah dalam bentuk apa pun dari perspektif HTTP sehingga harus ada dalam kisaran 200. Anda dengan sopan memberi tahu beberapa pengguna bahwa mereka tidak akan dilayani dengan mengirimkan kembali dokumen yang memberi tahu mereka. Dan ini semua berjalan dengan baik.
Pengguna tidak akan dapat menggunakan aplikasi Anda . Itu adalah keputusan sadar yang dibuat oleh logika bisnis Anda, bukan kecelakaan. Pada tingkat HTTP semuanya dory honky.
Sunting
Sepertinya yang kita lihat di sini adalah bentrokan antara sekolah lama dengan sekolah baru. Ketika HTTP dirancang, tidak ada layanan web, tidak ada SOAP, tidak ada JSON, tidak ada prinsip REST. Sebagai protokol di atas TCP ini sudah dianggap (dekat dengan) tingkat aplikasi dan banyak kode status tingkat tinggi didefinisikan. Ketika web mulai digunakan untuk layanan yang lebih kaya, tingkat tinggi dan sarana umum untuk mengangkut "amplop" diperlukan, para perancang meningkatkan HTTP daripada mendefinisikan protokol yang lebih baru dan lebih bersih, hanya karena HTTP ada di mana-mana.
Jadi dalam konteks layanan web modern, HTTP memang sedikit lebih dari lapisan transport yang bodoh dan sebagian besar kodenya mungkin dianggap tidak berlaku atau usang. Hanya memilih satu karena mendekati keadaan aplikasi Anda dan kebetulan berada di daftar itu yang pernah berarti sesuatu mungkin tampak tidak berbahaya, tapi saya pikir itu akan mengirim pesan yang salah. Anda tidak ingin HTTP memainkan peran yang mengatur dalam konteks layanan web.
sumber
5xx
kesalahan adalah kesalahan server - ada yang salah di server. Secara khusus, 503 menunjukkan bahwa:4xx
kesalahan adalah kesalahan klien - klien membuat permintaan bahwa server tidak dapat atau tidak mau memenuhi. Secara khusus, 403 menunjukkan ituSaya berpendapat bahwa
503
itu jelas salah, karena ini bukan masalah sementara - Anda tidak mendukung permintaan di daerah itu, titik. Argumen dapat dibuat bahwa Anda akhirnya berharap untuk mendukung area tersebut, tetapi maksud kode adalah untuk menyertakan header yang menunjukkan kapan klien dapat mencoba lagi. "Dalam 6 bulan" tidak sesuai dengan niat.403
adalah pilihan yang lebih baik karena layanan Anda hanya melarang permintaan dari lokal tertentu.sumber
Tak satu pun dari itu.
Jika API Anda dirancang dengan baik, URL menyertakan nama kota, mis
atau
karena geolokasi IP tidak dapat diandalkan, pengguna Anda mungkin menggunakan VPN, pengguna Anda mungkin ingin naik tumpangan untuk orang lain, dll. Menyarankan kota berdasarkan lokasi pengguna adalah tanggung jawab klien API . Biasanya, klien memiliki sumber daya yang jauh lebih baik untuk menentukan lokasi pengguna (misalnya, layanan lokasi perangkat seluler).
Setelah Anda selesai melakukannya, jawaban yang benar untuk
atau
menjadi jelas: 404 Tidak Ditemukan : Tidak ada sumber daya untuk memanggil tumpangan di SomeUnsupportedCity ada.
sumber
Ini sepertinya pertanyaan pasak hole / square round. Mengapa satu-satunya tanggapan Anda harus berupa kode HTTP? Kode kesalahan HTTP tidak mungkin mencakup semua kasus penggunaan.
Semua panggilan API Anda harus memiliki pesan tambahan yang muncul kembali - yaitu pesan kesalahan JSON kecil. Beri mereka 403 (karena, mereka benar-benar tidak memiliki izin untuk menggunakan API yang diberikan lokasi) dan mengembalikan sedikit informasi tambahan seperti yang Anda sarankan.
Jika Anda tidak melakukan ini maka lain kali Anda akan menanyakan kode kesalahan HTTP apa yang akan dikembalikan ketika pengguna meminta sebuah SUV tetapi hanya Prius yang tersedia.
sumber
Beberapa masuk akal.
403 Forbidden, untuk alasan yang disebutkan oleh Eric Stein dalam jawabannya . Anda dapat menggunakan berbagai informasi yang disediakan oleh permintaan untuk menentukan di mana klien berada dan siapa klien itu dan, berdasarkan permintaan itu, server tidak dapat atau tidak mau menanggapi.
Namun, saya juga akan mengajukan 451 Tidak Tersedia untuk Alasan Hukum sebagai status pengembalian yang mungkin untuk beberapa kasus. Status ini mengharapkan Anda untuk memasukkan (dalam tajuk) tautan ke undang-undang yang relevan. Khususnya untuk kasus-kasus di mana klien tidak boleh mengakses sumber daya Anda, dan bukan kasus klien yang lebih umum ada di wilayah atau wilayah yang tidak didukung.
Saya akan menghindari serangkaian status 5xx - ini sering menunjukkan masalah teknis sisi server. Tampaknya tidak demikian di sini.
sumber
Jika pembatasan ini karena alasan hukum, maka kode kesalahan HTTP yang sesuai adalah HTTP 451, "Tidak tersedia karena alasan hukum."
Ini biasanya digunakan dalam kasus materi yang telah dicabut karena tindakan DMCA atau tuntutan hukum karena kampanye pelecehan atau sejenisnya, tetapi semangat dan surat definisi tanggapan menyatakan:
Kode itu sendiri adalah referensi ke Fahrenheit 451 oleh Ray Bradbury.
sumber
Orang sering lupa bahwa kode status HTTP dapat diperpanjang.
https://tools.ietf.org/html/rfc2616#section-6.1.1
Anda selalu dapat hanya membuat kode status Anda sendiri dalam kisaran 400 untuk digunakan oleh API dan aplikasi klien Anda.
sumber
Expect token;city="Albequerque"
header. Maka respons yang paling tepat adalah 417, harapan gagal. tools.ietf.org/html/rfc2616#section-10.4.18 Dengan asumsi tentu saja ini untuk layanan web.Pada awalnya saya pikir 503 karena deskripsi "layanan tidak tersedia" tampaknya selaras dengan masalah tetapi melihat definisi , 503 benar-benar spesifik untuk tidak tersedianya server. Kemudian berpikir lebih banyak, Anda memberi tahu klien bahwa ada masalah dengan permintaan tersebut, bukan karena ada masalah sisi server.
403 lebih dekat karena Anda memberi tahu pengguna bahwa Anda menerima pesan dan memahaminya tetapi server tidak mau memenuhinya. Ini mungkin membingungkan sehingga penjelasan tekstual dapat ditambahkan untuk menggambarkan skenario. Per RFC, 404 juga merupakan pengganti yang valid untuk kode ini.
Kecuali seseorang telah memimpikan kode baru untuk ini, 403 atau 404 tampaknya yang paling dekat.
sumber
Anda harus mencocokkan deskripsi kesalahan dengan kode yang Anda berikan:
jika Anda berkata
Service not available in your area.
maka Anda harus memberi404
karena Anda mengklaim bahwa layanan tidak tersedia .jika Anda berkata
You are not authorized for this service in your area.
maka Anda harus memberi403
karena Anda mengklaim bahwa penelepon tidak berwenang .Saya akan memilih yang kedua.
sumber
Ada Internet-Draft saat ini (yang akan berakhir pada 31 Desember 2018) yang mengusulkan amandemen ke HTTP 451 Tidak tersedia untuk status Alasan Hukum . Draf menyarankan bahwa respons 451 harus berisi
geo-scope-block
tajuk yang harus "sesuai dengan daftar kode negara alfa-2 yang dipisahkan koma yang didefinisikan dalam [ISO.3166-1]". Namun, konsep tersebut juga menetapkan bahwa kode 451 tidak boleh digunakan "oleh operator untuk menolak akses ke sumber daya berdasarkan kebijakan yang ditentukan oleh operator (sebagai lawan dari tuntutan hukum yang ditempatkan pada operator)".Jadi dengan asumsi Anda tidak memiliki permintaan hukum untuk geoblock, 451 bukan kode yang benar. Apa kode yang benar? Yah, banyak jawaban lain sudah menyarankan 403 Terlarang , tetapi semuanya tampaknya "berdasarkan pendapat", jadi mari kita lihat apa yang dilakukan orang lain:
Jadi, tidak ada satu solusi universal, Anda hanya harus memilih satu yang Anda rasa paling sesuai dengan situasi Anda. Namun, apa pun yang Anda pilih, pastikan untuk menjelaskan masalah aktual di badan respons .
Saya akan mengatakan tidak ada yang salah hanya dengan menentukan kode status HTTP khusus, seperti RubberDuck sudah menjawab . Kode status khusus dalam kisaran 400 mungkin sebenarnya adalah panggilan yang cukup bagus, karena itu pasti akan mendapatkan perhatian pengembang jika mereka melihat sesuatu seperti "HTTP status 499". "403" terlalu mudah untuk dilewati sebagai " OK jadi saya salah kata sandi, mari kita coba yang lain ", dan itu menghasilkan jam yang terbuang sia-sia.
sumber