2009-06-23 12 views
6

नहीं की जगह मैं एक REST API विकासशील रहा हूँ, और मैं सोच रहा हूँ निम्नलिखित:HTTP PUT का उपयोग कर, लेकिन पूरी तरह से इकाई

मैं वेब सेवा की कुछ इकाइयां अद्यतन करने के लिए HTTP PUT उपयोग करना चाहते हैं। प्रारूप एक urlencoded शरीर होगा। क्या यह केवल उन संस्थाओं को अद्यतन करने के लिए स्वीकार्य है जो पूरी इकाई के बजाय वास्तव में निर्दिष्ट किए गए थे?

मैं पूछ रहा हूं, क्योंकि कुछ अपडेट करने के लिए PUT एक बहुत ही सुविधाजनक तरीका होगा, लेकिन मैं नहीं चाहता कि वे फ़ील्ड को हटा दें यदि वे उनमें से कुछ को गलत वर्तनी के साथ हुआ। इसके अतिरिक्त, मैं कार्यान्वयनकर्ता को हमेशा पहले प्राप्त करने के लिए मजबूर नहीं करना चाहता हूं और वास्तव में उपयोग नहीं कर सकने वाले प्रत्येक फ़ील्ड की प्रतिलिपि बनाना चाहता हूं ..

उत्तर

2

पुट केवल पूर्ण प्रतिस्थापन के लिए है। आपके पास समस्या का समाधान करने के लिए क्रिया पैच के लिए एक प्रस्ताव है (http://www.ietf.org/internet-drafts/draft-dusseault-http-patch-14.txt)

पैच, हालांकि, आप जो भी चाहते हैं वह अभी भी नहीं हो सकता है। जो भेजा जाता है वह एक अद्यतन संसाधन है जो बढ़ते काउंटर जैसी चीजें कर सकता है और इसलिए, रखे विपरीत, बेवकूफ नहीं है।

आप प्रत्येक फ़ील्ड को संसाधन के रूप में बेनकाब कर सकते हैं और प्रत्येक फ़ील्ड में एकाधिक डाल सकते हैं। आप अतिरिक्त विलंबता को कम करने के लिए pipeline डाल सकते हैं।

+0

पैच, जैसा कि आपने बताया है, अभी भी एक मसौदा है .. एकाधिक PUTs बहुत परेशान होंगे :) मैं इसके बजाय POST का उपयोग कर सकता हूं .. PUT बहुत अच्छा होगा हालांकि .. – Evert

+0

सहमत है कि पोस्ट संभवतः आपका सबसे अच्छा विकल्प है - लेकिन पाइपलाइन किए गए विचारों पर विचार करें यदि फ़ील्ड की संख्या # फ़ील्ड की कुल संख्या के सापेक्ष छोटी है। –

1

मैं कहूंगा कि यह समझ में आ सकता है। मैं आरईएसटी विचार को बहुत लचीला मानता हूं, इसलिए यदि आप एक इकाई को अपडेट करते हैं तो न केवल उन क्षेत्रों को स्थानांतरित करें जिन्हें आपके कार्यान्वयन में अपडेट करने की आवश्यकता है। यह सच है, हालांकि इसे अधिक सर्वर पक्षीय प्रयास की आवश्यकता है। आपको यह जांचना है कि इकाई उपलब्ध है या नहीं और डेटा स्थानांतरित डेटा के साथ अपडेट किया जा सकता है और आपको सत्यापन जांच की आवश्यकता है (स्कीमा मुक्त दस्तावेज़ उन्मुख डेटा के विपरीत)।

<!-- PUT books/1337 --> 

<book> 
    <title>Hello</title> 
    <author>John Doe</author> 
</book> 

<!-- PUT books/1337 --> 

<book> 
    <title>Hello here I am</title> 
</book> 
+0

आरईएसटी विचार लचीला हो सकता है, लेकिन यह कहता है कि आपके द्वारा उपयोग की जाने वाली क्रियाओं में समान व्यवहार होना चाहिए। HTTP PUT को कैसे संभाला जाना चाहिए इस पर काफी विशिष्ट है।सर्वसम्मति यह है कि PUT को इकाई को प्रतिस्थापित करना चाहिए और जो भी आप सुझा रहे हैं वह न करें। –

+0

Yepp मैं सहमत हूं कि पोस्ट सबसे अच्छा विकल्प है। जितना लचीला है उतना ही इसे मूल विचारों/नियमों को तोड़ना नहीं चाहिए। – Daff

4

आप बस संसाधनों को अद्यतन गुणों को पोस्ट कर सकते हैं। याद रखें कि पोस्ट कैच-ऑल क्रिया है जिसका उपयोग आप जो कुछ भी करने के लिए कर सकते हैं, जब अन्य क्रियाएं आपके लिए काम नहीं करतीं।

रॉय की लेख It's ok to use POST

1

मैं आंशिक अद्यतन के लिए समाधान के किसी भी इसे पसंद किया कभी नहीं किया है, या तो बाहर की जाँच करें। यदि मैं व्यापक रूप से उपयोग के लिए एक वेब सेवा डिजाइन कर रहा था, तो शायद मैं POST के साथ जाऊंगा। यदि यह काफी कम संख्या में लोगों द्वारा उपयोग के लिए किया गया था, यानी, मैं उन सभी लोगों से बात कर सकता हूं जिन्हें मैं कॉल करने की उम्मीद करता हूं, मेरे पास इसे संबोधित करने के लिए दो अलग-अलग विचार हैं।

  1. PUT एक नए 'अपडेट' संसाधन के लिए। यह मूल रूप से उस अद्यतन को रिकॉर्ड करेगा जिसे आप लागू करना चाहते हैं और फिर डुप्लिकेट लागू न करने का प्रभारी बनें। मैं कुछ हद तक एक वर्जन कंट्रोल सिस्टम की तरह काम करता हूं जो पैच/चेंजेट्स की एक सूची रखता है और हर बार जब मैं सभी कोने के मामलों को सोचने की कोशिश करता हूं तो बहुत जटिल हो जाता है।

  2. PUT संसाधन के लिए, लेकिन मौजूद कोई भी फ़ील्ड परिवर्तित न करें। फ़ील्ड की आवश्यकता है जिन्हें आप NULL को विशेष विशेषता के साथ उपस्थित होने के लिए बाहर करना चाहते हैं, यह दर्शाता है कि आप NULL इसे बाहर करना चाहते हैं। यह कहीं अधिक व्यावहारिक लगता है, लेकिन आम सहमति के साथ बहुत अच्छी तरह से फिट नहीं है कि PUT एक पूर्ण अद्यतन होना चाहिए।

यदि किसी के पास समान विचारों की चर्चा करने के लिए पॉइंटर्स हैं, तो कृपया तदनुसार संपादित/टिप्पणी करें।

+0

मेरे पास एक ही भावनाएं हैं .. भले ही यह वास्तव में नहीं हो सकता कि PUT का उद्देश्य क्या था; मैं अनुरोध पर वैसे भी पोस्ट-प्रोसेसिंग करूंगा (यह डीबी में जाएगा और जब लोग इसका अनुरोध करेंगे तो इसमें अलग-अलग प्रतिनिधित्व/प्रारूप होंगे)। मुझे लगता है कि लोगों को यह काम करने की उम्मीद है। मैं सिर्फ बाल तत्वों (उदाहरण: आवेषण) बनाने के लिए पोस्ट रखना चाहता हूं, इसलिए मुझे अंत में लगता है कि यह सबसे आसान है – Evert

+0

@ हांक - यदि आप इसके अर्थशास्त्र का उल्लंघन करने जा रहे हैं तो PUT का उपयोग करने का क्या कारण है? अगर मैं कुछ डालता हूं, तो इसे वापस लेना चाहिए। इस पर ध्यान दिए बिना पोस्ट का उपयोग क्यों नहीं करें? –

+0

@ टोनी एक बात के लिए, PUT अभी भी बेवकूफ होगा और पोस्ट अभी भी नहीं होगा। इसके अलावा, मेरी प्राकृतिक विचार प्रक्रिया उन चीज़ों को मिटाने के लिए * नहीं * है जो मौजूद नहीं हैं; मेरे लिए जो एक डॉन-केयर नहीं है, डिलीट नहीं; हटाएं/पूर्ण स्पष्ट होना चाहिए, निहित नहीं। यदि संचार ओवरहेड छोटा है, यानी, कुछ लोग शामिल हैं, तो मैं चाहता हूं कि मैं डिजाइन की खामियों के बारे में काम करने के बजाय अपने प्राकृतिक विचार-प्रक्रिया को फिट करने के लिए सहमत हूं। संचार ओवरहेड यही कारण है कि मैं व्यापक दर्शकों के लिए ऐसा नहीं करता; उस बिंदु पर, अतिरिक्त ओवरहेड मेरी मानसिक घर्षण को कम करने के लाभों से अधिक होगा। –

संबंधित मुद्दे