İken , HTTP 1.1 Spec görünüyor izin mesajı organları SİL istekleri, bunun için hiçbir tanımlanmış semantik olmadığından sunucular bunu görmezden gerektiğini belirtmek gibi görünüyor.
4.3 Mesaj Gövdesi
Bir sunucu, herhangi bir talep üzerine bir mesaj gövdesini okumalı ve iletmelidir; istek yöntemi bir varlık gövdesi için tanımlanmış anlambilim içermiyorsa, istek işlenirken ileti gövdesi göz ardı edilmelidir.
SO ve ötesinde bu konuyla ilgili birkaç ilgili tartışmayı zaten inceledim, örneğin:
- Bir varlık gövdesine bir HTTP DELETE isteği için izin verilir mi?
- HTTP İstek Yöntemlerinin Yükleri
- İstek gövdeli HTTP GET
Çoğu tartışma, bir DELETE üzerinde bir mesaj gövdesi sağlanmasına izin verilebileceği konusunda hemfikir görünmektedir , ancak genellikle önerilmez.
Ayrıca, çeşitli HTTP istemci kitaplıklarında, DELETE üzerindeki istek gövdelerini desteklemek için bu kitaplıklarda günlüğe kaydedilen daha fazla geliştirmenin olduğu bir eğilim fark ettim. Çoğu kütüphane, ara sıra biraz başlangıç direncine rağmen, mecbur görünmektedir.
Kullanım durumum, bir DELETE üzerine bazı gerekli meta verilerin eklenmesini gerektiriyor (örneğin, silme için gerekli olan diğer bazı meta verilerle birlikte silme "nedeni"). Hiçbiri tamamen uygun görünmeyen ve HTTP spesifikasyonları ve / veya REST en iyi uygulamaları ile aynı hizada olan aşağıdaki seçenekleri değerlendirdim:
- Mesaj Gövdesi - Spesifikasyon, DELETE üzerindeki mesaj gövdelerinin semantik değere sahip olmadığını belirtir; HTTP istemcileri tarafından tam olarak desteklenmez; standart uygulama değil
- Özel HTTP Üstbilgileri - Özel üstbilgiler gerektirmek genellikle standart uygulamalara aykırıdır ; bunların kullanılması API'min geri kalanıyla tutarsızdır ve bunların hiçbiri özel başlık gerektirmez; ayrıca, kötü özel başlık değerlerini belirtmek için iyi bir HTTP yanıtı yok (muhtemelen tamamen ayrı bir soru)
- Standart HTTP Üstbilgileri - Hiçbir standart üstbilgi uygun değildir
- Sorgu Parametreleri - Sorgu parametrelerinin eklenmesi, silinen İstek-URI'sini değiştirir; standart uygulamalara karşı
- POST Yöntemi - (örneğin
POST /resourceToDelete { deletemetadata }
) POST, silme için anlamsal bir seçenek değildir; POST aslında istenen zıt eylemi temsil eder (yani POST, kaynak astlarını oluşturur; ancak kaynağı silmem gerekiyor) - Çoklu Yöntemler - DELETE isteğini iki işleme bölmek (ör. PUT meta verileri silin, ardından SİL) atomik bir işlemi ikiye böler ve potansiyel olarak tutarsız bir durum bırakır. Silme nedeni (ve diğer ilgili meta veriler), kaynak temsilinin kendisinin bir parçası değildir.
İlk tercihim muhtemelen mesaj gövdesini kullanmak olacaktır, ikincisi özel HTTP başlıklarından sonra; ancak belirtildiği gibi, bu yaklaşımların bazı dezavantajları vardır.
DELETE isteklerine bu tür gerekli meta verileri dahil etmek için REST / HTTP standartlarına uygun herhangi bir öneri veya en iyi uygulama var mı? Düşünmediğim başka alternatifler var mı?
Jersey
için gövdeye izin vermezdelete
.