इदम शक्ति
RFC के बाद, एक PUT को संसाधन के लिए पूर्ण ऑब्जेक्ट देना होगा। इसका मुख्य कारण, यह है कि PUT को बेरोजगार होना चाहिए। इसका अर्थ है एक अनुरोध, जिसे सर्वर पर उसी परिणाम के लिए दोहराया जाना चाहिए।
यदि आप आंशिक अपडेट की अनुमति देते हैं, तो यह अब भी निष्क्रिय-शक्तिशाली नहीं हो सकता। यदि आपके पास दो ग्राहक हैं। ग्राहक A और B, तो निम्न परिदृश्य विकसित हो सकता है:
क्लाइंट A को संसाधन चित्रों से चित्र मिलता है। इसमें छवि का विवरण शामिल है, जो अभी भी मान्य है। क्लाइंट बी एक नई छवि डालता है और तदनुसार विवरण को अपडेट करता है। तस्वीर बदल गई है। क्लाइंट A देखता है, उसे विवरण बदलने की ज़रूरत नहीं है, क्योंकि यह वैसा ही है जैसा वह चाहता है और केवल छवि डालता है।
यह एक विसंगति को जन्म देगा, छवि में गलत मेटाडेटा संलग्न है!
इससे भी अधिक कष्टप्रद यह है कि कोई भी मध्यस्थ अनुरोध दोहरा सकता है। मामले में यह किसी भी तरह PUT विफल रहता है।
PUT का अर्थ बदला नहीं जा सकता (हालाँकि आप इसका दुरुपयोग कर सकते हैं)।
अन्य विकल्प
सौभाग्य से एक और विकल्प है, यह पैट है। PATCH एक ऐसी विधि है जो आपको किसी संरचना को आंशिक रूप से अपडेट करने की अनुमति देती है। आप बस एक आंशिक संरचना भेज सकते हैं। सरल अनुप्रयोगों के लिए, यह ठीक है। यह विधि आइडेंट पोटेंशियल होने की गारंटी नहीं है। ग्राहक को निम्नलिखित फॉर्म में एक अनुरोध भेजना चाहिए:
PATCH /file.txt HTTP/1.1
Host: www.example.com
Content-Type: application/example
If-Match: "e0023aa4e"
Content-Length: 20
{fielda: 1, fieldc: 2}
और सर्वर सफलता का झंडा बुलंद करने के लिए 204 (कोई सामग्री) के साथ वापस जवाब दे सकता है। त्रुटि पर आप संरचना के एक हिस्से को अपडेट नहीं कर सकते। PATCH विधि परमाणु है।
इस पद्धति का नुकसान यह है, कि सभी ब्राउज़र इसका समर्थन नहीं करते हैं, लेकिन REST- सेवा में यह सबसे स्वाभाविक विकल्प है।
उदाहरण पैच अनुरोध:
http://tools.ietf.org/html/rfc5789#section-2.1
जौनसँ पाछू
Json विकल्प बहुत व्यापक और एक दिलचस्प विकल्प लगता है। लेकिन तीसरे पक्ष के लिए इसे लागू करना मुश्किल हो सकता है। आपको यह तय करना होगा कि क्या आपका उपयोगकर्ता आधार इसे संभाल सकता है।
यह कुछ हद तक जटिल भी है, क्योंकि आपको एक छोटे दुभाषिया का निर्माण करने की आवश्यकता है जो कमांड को आंशिक संरचना में परिवर्तित करता है, जिसे आप अपने मॉडल को अपडेट करने के लिए उपयोग करने जा रहे हैं। यह व्याख्याकर्ता को यह भी जांचना चाहिए, यदि प्रदान किए गए आदेश समझ में आते हैं। कुछ कमांड एक दूसरे को रद्द करते हैं। (फ़ील्ड लिखें, फ़ील्ड हटाएं)। मुझे लगता है कि आप ग्राहक को उसकी / उसके पक्ष में डिबग समय को सीमित करने के लिए इसे वापस रिपोर्ट करना चाहते हैं।
लेकिन अगर आपके पास समय है, तो यह वास्तव में एक सुंदर समाधान है। आपको अभी भी पाठ्यक्रम के क्षेत्रों को मान्य करना चाहिए। REST मॉडल में रहने के लिए आप इसे PATCH विधि के साथ जोड़ सकते हैं। लेकिन मुझे लगता है कि POST यहां स्वीकार्य होगा।
बुरा जा रहा है
यदि आप PUT विकल्प के साथ जाने का निर्णय लेते हैं, जो कुछ हद तक जोखिम भरा है। फिर आपको कम से कम त्रुटि को नहीं छोड़ना चाहिए। उपयोगकर्ता के पास एक निश्चित प्रत्याशा है (डेटा अपडेट किया जाएगा) और यदि आप इसे तोड़ते हैं, तो आप कुछ डेवलपर्स को अच्छा समय नहीं देने जा रहे हैं।
आप वापस झंडा फहराने के लिए चुन सकते हैं: 409 संघर्ष या 403 निषिद्ध। यह निर्भर करता है कि आप अद्यतन प्रक्रिया को कैसे देखते हैं। यदि आप इसे नियमों (सिस्टम-केंद्रित) के एक सेट के रूप में देखते हैं, तो संघर्ष अच्छा होगा। कुछ इस तरह, इन क्षेत्रों updateable नहीं हैं। (नियमों के विरोध में)। यदि आप इसे प्राधिकरण की समस्या (उपयोगकर्ता-केंद्रित) के रूप में देखते हैं, तो आपको मना किया जाना चाहिए। साथ: आप इन फ़ील्ड्स को बदलने के लिए अधिकृत नहीं हैं।
आपको अभी भी उपयोगकर्ताओं को सभी परिवर्तनीय फ़ील्ड भेजने के लिए बाध्य करना चाहिए।
इसे लागू करने का एक उचित विकल्प इसे उप-संसाधन पर सेट करना है, जो केवल परिवर्तनीय डेटा प्रदान करता है।
निजी राय
व्यक्तिगत रूप से मैं (यदि आपको ब्राउज़रों के साथ काम नहीं करना है) तो साधारण पैटेक मॉडल के लिए जाना होगा और फिर बाद में इसे JSON प्रोसेसर प्रोसेसर के साथ बढ़ा देगा। इस mimetypes पर विभेदित करके किया जा सकता है: चूने के पैच प्रकार:
आवेदन / json-पैच
और json: एप्लीकेशन / json-पैच
इसे दो चरणों में लागू करना आसान बनाता है।