जबकि HTTP 1.1 कल्पना करने लगता है की अनुमति देते हैं पर संदेश निकायों DELETE अनुरोध है, यह संकेत मिलता है कि सर्वर इसे अनदेखा चाहिए, क्योंकि इसके लिए कोई परिभाषित अर्थ विज्ञान हैं लगता है।
4.3 संदेश निकाय
एक सर्वर किसी भी अनुरोध पर संदेश-निकाय को पढ़ता और अग्रेषित करता है; यदि अनुरोध पद्धति में निकाय-निकाय के लिए परिभाषित शब्दार्थ शामिल नहीं हैं, तो अनुरोध को संभालते समय संदेश-निकाय SHOULD को अनदेखा किया जाना चाहिए।
मैंने पहले ही इस विषय पर SO और उसके बाद के कई संबंधित चर्चाओं की समीक्षा की है, जैसे:
- क्या एक इकाई निकाय को HTTP DELETE अनुरोध के लिए अनुमति है?
- HTTP अनुरोध विधि के पेलोड
- HTTP बॉडी रिक्वेस्ट बॉडी के साथ
अधिकांश चर्चाओं से लगता है कि DELETE पर एक संदेश निकाय प्रदान करने की अनुमति दी जा सकती है , लेकिन आमतौर पर इसकी अनुशंसा नहीं की जाती है।
इसके अलावा, मैंने विभिन्न HTTP क्लाइंट पुस्तकालयों में एक प्रवृत्ति देखी है जहां अधिक से अधिक संवर्द्धन इन पुस्तकालयों के लिए DELETE पर अनुरोध निकायों का समर्थन करने के लिए लॉग इन हो रहे हैं। अधिकांश पुस्तकालयों को उपकृत करना प्रतीत होता है, हालांकि कभी-कभी प्रारंभिक प्रतिरोध का थोड़ा सा साथ।
मेरा उपयोग मामला DELETE पर कुछ आवश्यक मेटाडेटा को जोड़ने के लिए कहता है (उदाहरण के लिए "कारण" हटाने के लिए, कुछ अन्य मेटाडेटा को हटाने के लिए आवश्यक है)। मैंने निम्नलिखित विकल्पों पर विचार किया है, जिनमें से कोई भी पूरी तरह से उचित नहीं है और HTTP ऐनक और / या अन्य सर्वोत्तम प्रथाओं के साथ इनलाइन है:
- संदेश निकाय - यह संकेत इंगित करता है कि DELETE पर संदेश निकायों का कोई शब्दार्थ मूल्य नहीं है; HTTP क्लाइंट द्वारा पूरी तरह से समर्थित नहीं; मानक अभ्यास नहीं
- कस्टम HTTP हेडर - कस्टम हेडर की आवश्यकता आम तौर पर मानक प्रथाओं के खिलाफ होती है ; उनका उपयोग करना मेरे बाकी एपीआई के साथ असंगत है, जिनमें से किसी को भी कस्टम हेडर की आवश्यकता नहीं है; इसके अलावा, खराब कस्टम हेडर मानों (संभवतः एक अलग प्रश्न) को इंगित करने के लिए कोई अच्छा HTTP प्रतिक्रिया उपलब्ध नहीं है
- मानक HTTP हेडर - कोई मानक हेडर उपयुक्त नहीं हैं
- क्वेरी पैरामीटर्स - क्वेरी पैराम्स को जोड़ने से वास्तव में अनुरोध-यूआरआई को हटा दिया जाता है; मानक प्रथाओं के खिलाफ
- POST विधि - (उदाहरण के लिए
POST /resourceToDelete { deletemetadata }
) POST हटाने का शब्दार्थ विकल्प नहीं है; पोस्ट वास्तव में प्रतिनिधित्व विपरीत कार्रवाई वांछित (यानी पोस्ट संसाधन मातहत बनाता है, लेकिन मैं संसाधन हटाने की आवश्यकता) - मल्टीपल मेथड्स - DELETE अनुरोध को दो ऑपरेशनों में विभाजित करना (जैसे PUT डिलीट मेटाडेटा, फिर DELETE) एक परमाणु ऑपरेशन को दो में विभाजित करता है, संभवतः एक असंगत स्थिति को छोड़कर। हटाने का कारण (और अन्य संबंधित मेटाडेटा) संसाधन प्रतिनिधित्व का हिस्सा नहीं हैं।
मेरी पहली प्राथमिकता शायद संदेश बॉडी का उपयोग करना होगा, दूसरा कस्टम HTTP हेडर के लिए; हालांकि, जैसा कि संकेत दिया गया है, इन दृष्टिकोणों के कुछ डाउनसाइड हैं।
DELETE अनुरोधों पर इस तरह के आवश्यक मेटाडेटा को शामिल करने के लिए REST / HTTP मानकों के साथ कोई सिफारिशें या सर्वोत्तम अभ्यास सम्मिलित हैं? क्या कोई अन्य विकल्प है जिस पर मैंने विचार नहीं किया है?
Jersey
लिए निकाय को अनुमति नहीं देतेdelete
हैं।