Saya bertanya-tanya apa pendapat orang tentang PUT
operasi yang tenang yang tidak menghasilkan apa-apa (nol) di badan tanggapan.
Saya bertanya-tanya apa pendapat orang tentang PUT
operasi yang tenang yang tidak menghasilkan apa-apa (nol) di badan tanggapan.
Jawaban:
Spesifikasi HTTP ( RFC 2616 ) memiliki sejumlah rekomendasi yang berlaku. Inilah interpretasi saya:
200 OK
untuk PUT yang berhasil dari pembaruan ke sumber yang ada. Tidak diperlukan badan respons. (Per Bagian 9.6 , 204 No Content
bahkan lebih tepat.)201 Created
untuk PUT yang berhasil dari sumber daya baru, dengan URI yang paling spesifik untuk sumber daya baru dikembalikan di bidang header Lokasi dan semua URI dan metadata sumber daya lain yang relevan yang digema di badan respons. ( RFC 2616 Bagian 10.2.2 )409 Conflict
untuk PUT yang tidak berhasil karena 3 rd modifikasi -party, dengan daftar perbedaan antara update berusaha dan sumber daya saat ini dalam tubuh respon. ( RFC 2616 Bagian 10.4.10 )400 Bad Request
untuk PUT yang gagal, dengan teks berbahasa alami (seperti bahasa Inggris) di badan respons yang menjelaskan mengapa PUT gagal. ( RFC 2616 Bagian 10.4 )No response body needed
dalam kaitannya dengan 200. Faktanya, badan respons tidak disebutkan sama sekali sehubungan dengan PUT. Ini hanya menyatakanIf an existing resource is modified, either the 200 (OK) or 204 (No Content) response codes SHOULD be sent to indicate successful completion of the request.
Berbeda dengan sebagian besar jawaban di sini, saya benar-benar berpikir bahwa PUT harus mengembalikan sumber daya yang diperbarui (selain tentu saja kode HTTP).
Alasan mengapa Anda ingin mengembalikan sumber daya sebagai respons untuk operasi PUT adalah karena ketika Anda mengirim representasi sumber daya ke server, server juga dapat menerapkan beberapa pemrosesan ke sumber daya ini, sehingga klien ingin tahu bagaimana sumber daya ini terlihat seperti setelah permintaan selesai dengan sukses. (Jika tidak, ia harus mengeluarkan permintaan GET lain).
Saya pikir mungkin bagi server untuk mengembalikan konten sebagai tanggapan terhadap PUT. Jika Anda menggunakan format amplop respons yang memungkinkan untuk data yang di-sideload (seperti format yang dikonsumsi oleh data-bara), maka Anda juga dapat menyertakan objek lain yang mungkin telah dimodifikasi melalui pemicu basis data, dll. (Data yang di-sisipkan secara eksplisit untuk mengurangi # permintaan, dan ini sepertinya tempat yang bagus untuk mengoptimalkan.)
Jika saya hanya menerima PUT dan tidak memiliki apa pun untuk melaporkan kembali, saya menggunakan kode status 204 tanpa badan. Jika saya memiliki sesuatu untuk dilaporkan, saya menggunakan kode status 200, dan termasuk badan.
The HTTP / 1.1 spec (bagian 9.6) membahas kode respon / kesalahan yang sesuai. Namun itu tidak membahas konten respons.
Apa yang kamu harapkan? Kode respons HTTP sederhana (200 dll.) Tampak langsung dan tidak ambigu bagi saya.
Jika backend dari REST API adalah database relasional SQL, maka
Jika Anda tidak peduli dengan pembaruan yang hilang, atau jika Anda ingin memaksa klien Anda untuk melakukan GET segera setelah PUT, maka jangan kembalikan apa pun dari PUT.
Kode respons Http 201 untuk "Dibuat" bersama dengan header "Lokasi" untuk menunjuk ke tempat klien dapat menemukan sumber daya yang baru dibuat.
Saya menggunakan RESTful API di layanan saya, dan ini pendapat saya: Pertama, kita harus mendapatkan pandangan umum :PUT
digunakan untuk memperbarui sumber daya yang tidak dibuat atau didapat.
Saya mendefinisikan sumber daya dengan: Stateless resource
dan Stateful resource
:
Sumber daya tanpa kewarganegaraan Untuk sumber daya ini, cukup kembalikan HttpCode dengan tubuh kosong, itu sudah cukup.
Sumber daya stateful Misalnya: versi sumber daya. Untuk sumber daya semacam ini, Anda harus memberikan versi ketika Anda ingin mengubahnya, jadi kembalikan sumber daya penuh atau kembalikan versi ke klien, sehingga klien tidak perlu mengirim permintaan dapatkan setelah tindakan pembaruan.
Tapi , untuk layanan atau sistem, tetapsimple
,clearly
,easy to use and maintain
adalah hal yang paling penting.
Sama seperti badan Permintaan kosong yang sesuai dengan tujuan asli permintaan GET dan badan tanggapan kosong sesuai dengan tujuan awal permintaan PUT.
tampaknya baik-baik saja ... meskipun saya akan berpikir indikasi dasar keberhasilan / kegagalan / waktu diposting / # byte yang diterima / dll. akan lebih disukai.
sunting: Saya berpikir sejalan dengan integritas data dan / atau penyimpanan catatan; metadata seperti hash MD5 atau cap waktu untuk waktu yang diterima mungkin berguna untuk file data besar.
Idealnya itu akan mengembalikan respons sukses / gagal.
Ada perbedaan antara tajuk dan isi respons HTTP. PUT seharusnya tidak pernah mengembalikan badan, tetapi harus mengembalikan kode respons di header. Pilih saja 200 jika berhasil, dan 4xx jika tidak. Tidak ada yang namanya kode pengembalian null. Mengapa Anda ingin melakukan ini?
200
untuk PUT, DELETE, atau metode lainnya. Apakah saya melewatkan sesuatu? Seperti Mozilla menjadi bos W3 dan IETF? ;) Atau mungkin mereka belum pernah mendengar tentang Prinsip Robustness Postel.