Haruskah saya membuat kode status HTTP saya sendiri? (ala Twitter 420: Tingkatkan Ketenangan Anda)

24

Saat ini saya sedang mengimplementasikan API HTTP, yang pertama kalinya.

Saya telah menghabiskan banyak waktu mencari di halaman Wikipedia untuk kode status HTTP, karena saya bertekad untuk mengimplementasikan kode yang tepat untuk situasi yang tepat. Tercantum pada halaman itu adalah kode dengan nomor 420, yang merupakan kode khusus yang digunakan Twitter untuk membatasi tarif.

Namun, sudah ada kode untuk pembatasan tarif. Ini 429.

Hal ini membuat saya bertanya-tanya mengapa mereka akan menetapkan kebiasaan, ketika sudah ada use case. Apakah itu lucu? Dan jika demikian, maka keadaan apa yang membuatnya dapat diterima untuk mengembalikan kode status yang berbeda, dan apa, jika ada masalah dengan klien?

Saya membaca di suatu tempat bahwa Mozilla tidak menerapkan 418: I’m a teapotrespons lelucon , yang membuat saya berpikir bahwa klien memilih kode status yang mereka terapkan. Jika itu benar, maka saya bisa membayangkan Twitter yang lucu meningkatkan kode tenang Anda menjadi bermasalah.

Kecuali saya salah, dan kita dapat menyesuaikan nomor kode apa pun dengan apa pun yang kita suka, dan hanya konvensi yang menyatakan bahwa 404 berarti tidak ditemukan, dan 429 berarti santai saja.

Max Bucknell
sumber

Jawaban:

31

Seluruh Internet dibangun berdasarkan konvensi. Kami menyebutnya RFC. Meskipun tidak ada yang akan datang dan menangkap Anda jika Anda melanggar RFC, Anda berisiko mengambil risiko bahwa layanan Anda tidak akan beroperasi dengan seluruh dunia. Dan jika itu terjadi, Anda menghadapi risiko startup Anda tidak mendapatkan pelanggan, bisnis Anda mendapatkan pers yang buruk, pemegang saham Anda memberontak, Anda diberhentikan secara permanen, dll.

Kode status HTTP memiliki registri IANA sendiri , masing-masing dapat dilacak kembali ke RFC (atau dalam satu kasus, ID) yang menetapkannya.

Dalam kasus kode status 420 aneh dari Twitter versus kode status 429 standar yang didefinisikan dalam RFC 6585 , penjelasan yang paling mungkin adalah bahwa yang terakhir hanya didefinisikan baru-baru ini; tanggal RFC hingga April 2012. Kami melihat bahwa Twitter hanya menggunakan 420 di versi 1 API sebelumnya yang sudah tidak digunakan ; API versi 1.1 saat ini sebenarnya menggunakan kode status 429 . Jadi jelas bahwa Twitter memerlukan kode status untuk ini dan menetapkan sendiri status mereka; begitu yang standar tersedia, mereka beralih ke sana.

Praktik terbaik, tentu saja, adalah menempel sedekat mungkin dengan standar. Ketika Anda membaca RFC, Anda hampir selalu akan menemukan kata-kata seperti "HARUS" dan "HARUS"; ini memiliki arti khusus ketika Anda sedang membangun aplikasi Anda, yang dapat Anda temukan di RFC 2119 .

Michael Hampton
sumber
2
+1 Untuk menambahkan konteks historis mengapa kode Status 420ada dan sekarang 'tidak berfungsi'.
2

Pertanyaan ini sedikit menggali masalah ini. Tetapi masalahnya, sementara Anda secara teknis dapat membuat kode status apa pun yang Anda inginkan, membuat kode status di luar lingkup tradisional makna kode status hanya membuat API Anda lebih tumpul dan misterius bagi orang lain. Kecuali jika itu intinya, dan API yang Anda buat sangat menakjubkan sehingga semua orang akan dengan senang hati mengubah kode mereka untuk mengikuti petunjuk Anda jadi apa bedanya, kan?

Intinya begini: Standar apa pun bisa dilanggar. Tetapi jika Anda mematahkannya, apa untung atau ruginya dengan melakukannya?

Secara umum, dalam kasus di mana Anda dapat melakukan sesuatu yang berbeda tetapi standar menyiratkan standar, yang terbaik adalah mematuhi standar kecuali ada alasan yang sangat kuat dan memaksa untuk menjauh dari standar yang ditetapkan. Dalam kasus Twitter, 420: Enhance Your Calmmereka membuat kode respons yang dengan jelas berbicara tentang situasi unik yang mereka hadapi. Yang memperlambat permintaan tanpa menolak layanan.

JakeGould
sumber