मुझे लगता है कि आप इसे संभालने के लिए पोस्ट या पैच विधि का उपयोग कर सकते हैं क्योंकि वे आम तौर पर इसके लिए डिज़ाइन करते हैं।
एक POST
विधि का प्रयोग आम तौर पर जब सूची संसाधन पर इस्तेमाल किया एक तत्व जोड़ने के लिए प्रयोग किया जाता है, लेकिन आप भी इस विधि के लिए कई कार्यों का समर्थन कर सकते हैं। यह उत्तर देखें: How to Update a REST Resource Collection। आप इनपुट के लिए अलग-अलग प्रतिनिधित्व स्वरूपों का भी समर्थन कर सकते हैं (यदि वे किसी सरणी या एकल तत्वों से मेल खाते हैं)।
मामले में, अद्यतन का वर्णन करने के लिए अपने प्रारूप को परिभाषित करना आवश्यक नहीं है।
PATCH
विधि का उपयोग करना भी उपयुक्त है क्योंकि संबंधित अनुरोध आंशिक अद्यतन से मेल खाते हैं। RFC5789 (http://tools.ietf.org/html/rfc5789) के अनुसार:
कई अनुप्रयोगों हाइपरटेक्स्ट ट्रांसफर प्रोटोकॉल (HTTP) का विस्तार आंशिक संसाधन संशोधन करने के लिए एक सुविधा की आवश्यकता है। मौजूदा HTTP PUT विधि केवल दस्तावेज़ के पूर्ण प्रतिस्थापन की अनुमति देती है। मौजूदा प्रस्ताव को संशोधित करने के लिए यह प्रस्ताव एक नई HTTP विधि, पैच जोड़ता है।
मामले में, आपको आंशिक अद्यतन का वर्णन करने के लिए अपने प्रारूप को परिभाषित करना होगा।
मुझे लगता है कि इस मामले में, POST
और PATCH
काफी समान के बाद से आप वास्तव में प्रत्येक तत्व के लिए ऐसा करने के लिए आपरेशन वर्णन करने के लिए की जरूरत नहीं है कर रहे हैं। मैं कहूंगा कि यह भेजने के लिए प्रतिनिधित्व के प्रारूप पर निर्भर करता है।
PUT
का मामला थोड़ा कम स्पष्ट है। वास्तव में, एक विधि PUT
का उपयोग करते समय, आपको पूरी सूची प्रदान करनी चाहिए। वास्तव में, अनुरोध में प्रदान किया गया प्रतिनिधित्व सूची संसाधन एक के प्रतिस्थापन में होगा।
आपके पास संसाधन पथ से संबंधित दो विकल्प हो सकते हैं।
इस मामले में के लिए संसाधन पथ का उपयोग करके आप स्पष्ट रूप प्रतिनिधित्व आप अनुरोध में प्रदान में एक बांधने की मशीन के साथ किए गए दस्तावेज़ों की लिंक देना।
यहां इस /docs
के लिए नमूना मार्ग है।
इस तरह के दृष्टिकोण की सामग्री विधि POST
के लिए हो सकता है:
[
{ "doc_number": 1, "binder": 4, (other fields in the case of creation) },
{ "doc_number": 2, "binder": 4, (other fields in the case of creation) },
{ "doc_number": 3, "binder": 5, (other fields in the case of creation) },
(...)
]
- बांधने की मशीन तत्व के उप संसाधन पथ का उपयोग करना
इसके अलावा आप भी करने के लिए उप मार्गों लाभ उठाने के लिए विचार कर सकते हैं दस्तावेज़ और बाइंडर्स के बीच लिंक का वर्णन करें। एक दस्तावेज़ और बाइंडर के बीच संबंध के संबंध में संकेत अब अनुरोध सामग्री के भीतर निर्दिष्ट नहीं किया जाना चाहिए।
यहां इस /binder/{binderId}/docs
के लिए नमूना मार्ग है। इस मामले में, दस्तावेज़ POST
या PATCH
के साथ दस्तावेज़ों की एक सूची भेजना दस्तावेज़ मौजूद होने के बाद पहचानकर्ता binderId
के साथ बाइंडर को संलग्न करेगा यदि यह अस्तित्व में नहीं है।
इस तरह के दृष्टिकोण की सामग्री विधि POST
के लिए हो सकता है:
[
{ "doc_number": 1, (other fields in the case of creation) },
{ "doc_number": 2, (other fields in the case of creation) },
{ "doc_number": 3, (other fields in the case of creation) },
(...)
]
प्रतिक्रिया के बारे में, यह प्रतिक्रिया और त्रुटियों वापस जाने के लिए के स्तर को परिभाषित करने के लिए आप पर निर्भर है। मुझे दो स्तर दिखाई देते हैं: स्थिति स्तर (वैश्विक स्तर) और पेलोड स्तर (पतला स्तर)। यह भी परिभाषित करने के लिए आप पर निर्भर है कि आपके अनुरोध से संबंधित सभी आवेषण/अपडेट परमाणु होना चाहिए या नहीं।
इस मामले में, आप HTTP स्थिति का लाभ उठाने कर सकते हैं। अगर सब कुछ ठीक हो जाता है, तो आपको स्थिति 200
मिलती है। यदि नहीं, तो 400
जैसी कोई अन्य स्थिति यदि प्रदान किया गया डेटा सही नहीं है (उदाहरण के लिए बाइंडर आईडी मान्य नहीं है) या कुछ और।
इस मामले में, एक स्थिति 200
लौटा दी जाएगी और यह वर्णन करने के लिए क्या किया गया था और जहां त्रुटियों अंत में पाए जाते हैं प्रतिक्रिया प्रतिनिधित्व पर निर्भर है। थोक अद्यतन के लिए अपने आरईएसटी एपीआई में लोचदार खोज का अंत बिंदु है। यह आपको इस स्तर पर कुछ विचार दे सकता है: http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/bulk.html।
तुम भी उपलब्ध कराए गए आंकड़ों को संभालने के लिए एक अतुल्यकालिक प्रसंस्करण लागू कर सकते हैं। इस मामले में, HTTP स्थिति रिटर्न 202
होगा। क्या होता है यह देखने के लिए ग्राहक को अतिरिक्त संसाधन खींचने की आवश्यकता है।
परिष्करण से पहले, मैं यह भी देखना चाहता हूं कि ओडाटा विनिर्देश नेविगेशन लिंक नामक सुविधा वाले इकाइयों के बीच संबंधों के संबंध में इस मुद्दे को संबोधित करता है। शायद आप इसे देख सकते हैं ;-)
निम्न लिंक आपको भी मदद कर सकता है: https://templth.wordpress.com/2014/12/15/designing-a-web-api/।
आशा है कि यह आप में मदद करता है, थियरी
कभी-कभी ग्राहक को थोक ऑपरेशन की आवश्यकता होती है और यह परवाह नहीं करना चाहता कि संसाधन वहां है या नहीं। जैसा कि मैंने सवाल में कहा था, ग्राहक 'डॉक्स' का एक गुच्छा भेजना चाहता है और उन्हें 'बाइंडर्स' से जोड़ना चाहता है। ग्राहक बाइंडर्स बनाना चाहता है अगर वे मौजूद नहीं हैं और यदि वे करते हैं तो एसोसिएशन बनाते हैं। एक सिंगल बल्क अनुरोध में। – norbertpy