Meskipun spesifikasi HTTP 1.1 tampaknya mengizinkan badan pesan pada permintaan DELETE , tampaknya menunjukkan bahwa server harus mengabaikannya karena tidak ada semantik yang ditentukan untuk itu.
4.3 Isi Pesan
Server HARUS membaca dan meneruskan badan pesan berdasarkan permintaan apa pun; jika metode permintaan tidak menyertakan semantik yang ditentukan untuk badan entitas, maka badan pesan HARUS diabaikan saat menangani permintaan.
Saya telah meninjau beberapa diskusi terkait tentang topik ini di SO dan seterusnya, seperti:
- Apakah badan entitas diperbolehkan untuk permintaan HTTP DELETE?
- Muatan Metode Permintaan HTTP
- HTTP GET dengan isi permintaan
Sebagian besar diskusi tampaknya setuju bahwa memberikan badan pesan pada HAPUS mungkin diperbolehkan , tetapi umumnya tidak disarankan.
Lebih lanjut, saya telah memperhatikan tren di berbagai pustaka klien HTTP di mana semakin banyak peningkatan tampaknya dicatat untuk pustaka ini untuk mendukung badan permintaan di DELETE. Sebagian besar perpustakaan tampaknya menurut, meskipun kadang-kadang dengan sedikit penolakan awal.
Kasus penggunaan saya meminta penambahan beberapa metadata yang diperlukan pada DELETE (misalnya "alasan" untuk penghapusan, bersama dengan beberapa metadata lain yang diperlukan untuk penghapusan). Saya telah mempertimbangkan opsi berikut, tidak ada yang tampak sepenuhnya sesuai dan sejalan dengan spesifikasi HTTP dan / atau praktik terbaik REST:
- Isi Pesan - Spesifikasi menunjukkan bahwa badan pesan di DELETE tidak memiliki nilai semantik; tidak sepenuhnya didukung oleh klien HTTP; bukan praktik standar
- Header HTTP Kustom - Mewajibkan header khusus umumnya bertentangan dengan praktik standar ; menggunakannya tidak konsisten dengan API saya lainnya, tidak ada yang memerlukan tajuk khusus; selanjutnya, tidak ada respons HTTP yang baik yang tersedia untuk menunjukkan nilai header khusus yang buruk (mungkin pertanyaan yang sama sekali berbeda)
- Header HTTP Standar - Tidak ada header standar yang sesuai
- Parameter Kueri - Menambahkan parameter kueri sebenarnya mengubah URI Permintaan yang sedang dihapus; bertentangan dengan praktik standar
- Metode POST - (mis.
POST /resourceToDelete { deletemetadata }
) POST bukanlah opsi semantik untuk dihapus; POST sebenarnya mewakili tindakan berlawanan yang diinginkan (yaitu POST membuat bawahan sumber daya; tetapi saya perlu menghapus sumber daya) - Beberapa Metode - Memisahkan permintaan DELETE menjadi dua operasi (misalnya PUT menghapus metadata, lalu DELETE) membagi operasi atom menjadi dua, berpotensi meninggalkan status yang tidak konsisten. Alasan penghapusan (dan metadata terkait lainnya) bukan bagian dari representasi resource itu sendiri.
Preferensi pertama saya mungkin menggunakan badan pesan, kedua setelah header HTTP kustom; namun, seperti yang ditunjukkan, ada beberapa kelemahan dari pendekatan ini.
Apakah ada rekomendasi atau praktik terbaik yang sejalan dengan standar REST / HTTP untuk menyertakan metadata yang diperlukan tersebut pada permintaan DELETE? Apakah ada alternatif lain yang belum saya pertimbangkan?
Jersey
tidak mengizinkan isi untukdelete
permintaan.