Saya sedang mengembangkan API TENANG di mana http://server/thingyapi/thingyblob/1234
mengembalikan file (alias "gumpalan") yang terkait dengan thingy # 1234 untuk diunduh. Tetapi mungkin permintaan tersebut dibuat pada suatu waktu file tidak ada di server tetapi yang paling pasti akan tersedia di lain waktu. Ada proses batch di server yang menghasilkan semua gumpalan untuk semua barang. Thingy 1234 sudah ada dan datanya, selain gumpalan, sudah tersedia. Server belum dapat membuat gumpalan benda 1234 belum.
Saya tidak ingin mengembalikan 404; itu untuk barang yang tidak ada. Ini adalah benda yang ada, tetapi gumpalannya belum dihasilkan. Agak seperti video YouTube yang "sedang diproses". Saya juga tidak berpikir kode pengalihan tidak tepat; tidak ada URL "lain" untuk dicoba.
Apa kode status HTTP yang benar untuk dikembalikan dalam kasus seperti itu?
204
"Tidak Ada Konten"? Apakah menunjukkan bahwa server telah berhasil memproses permintaan dan tidak mengembalikan konten [saat ini].Jawaban:
Saya sarankan
202 - Accepted
. Dari dokumentasi :sumber
"Masalah", seperti apa adanya, ada di sisi server: klien telah membuat permintaan yang bagus, tetapi server tidak dapat memenuhinya. Jadi saya cenderung ke "Server Error", kode status 5xx.
Quoth RFC 7231 (standar HTTP saat ini, penekanan ditambahkan):
Catatan
Dari kode yang tersedia, saya akan mengatakan 503, "Layanan Tidak Tersedia" adalah yang paling cocok:
catatan:
Retry-After
nilai. Anda bisa memberikan nilai perkiraan waktu penyelesaian untuk eksekusi selanjutnya dari proses batch, atau interval eksekusi dari proses batch.Namun, mendefinisikan kode status 5xx Anda sendiri (591) diizinkan , akan memiliki semantik yang salah:
Klien akan memperlakukan kode status Anda sendiri sebagai 500, "Kesalahan Server Internal" , yang tidak benar.
sumber
307 - TEMPORARY REDIRECT
yang baik jika Anda ingin memaksa sisi klien untuk menunggu di tempat lain sementara sumber daya Anda sedang "disiapkan"Saya pikir 423 - Terkunci dapat digunakan untuk tujuan ini:
sumber
URL tidak sesuai dengan permintaan sesuatu.
http://server/thingyapi/thingyblob/1234
Klien meminta thingyblob, yang tidak ada. Jika ada, Anda akan memberikannya kepada mereka.
404.
sumber
503
sebagai respons yang tepat. Belum lagi beberapa saran aneh lainnya.Pilihan lain:
503 - Service Unavailable
.sumber
Karena sumber daya Anda belum siap, Anda mungkin tahu kapan (kurang-lebih) itu akan tersedia dan kapan klien dapat mencoba kembali permintaannya. Ini berarti Anda mungkin ingin memanfaatkan Retry-After header . Header ini valid dengan 503 (Layanan Tidak Tersedia), yang berarti seluruh situs tidak aktif untuk pemeliharaan, dan respons 3xx (Pengalihan).
Menurut pendapat saya 302 (Ditemukan) dengan Retry-After header akan menjadi pilihan terbaik, tetapi saya tidak yakin apakah bidang Lokasi header respons dapat sama dengan permintaan url. Itu redirect melingkar.
sumber
409 Konflik
Menunjukkan bahwa permintaan tidak dapat diproses karena konflik dalam permintaan, seperti konflik edit dalam kasus beberapa pembaruan. [Sumber Wikipedia.]
Ini bisa tepat.
Jika Anda tidak dapat memenuhi permintaan dengan mengembalikan data - maka itu tidak berhasil. Saya pikir 202 menyarankan server telah mengantri permintaan dan itu akan memenuhi permintaan nanti. Tetapi dalam kasus Anda, permintaan adalah untuk data sekarang dan telah gagal. Jika Anda mencoba lagi nanti itu adalah permintaan yang berbeda.
Saya pikir Anda memiliki konflik .. Anda ingin data .. tetapi sedang diedit / diperbarui. Ini juga akan menjadi kasus jika Thingy1234 sudah ada dan telah berhasil diunduh sebelumnya, tetapi sekarang sedang dalam proses diedit tidak tersedia sementara pengeditan sedang berlangsung.
sumber
501 - Tidak Diimplementasikan
Persis seperti bagaimana bunyinya. Fitur yang belum diterapkan, tetapi menyiratkan ketersediaan di masa depan.
Berikut ini tautan ke ringkasan kesalahan 5xx .
sumber