मुझे लगता है कि आप इसे संभालने के लिए एक POST या PATCH विधि का उपयोग कर सकते हैं क्योंकि वे आम तौर पर इसके लिए डिज़ाइन करते हैं।
किसी POST
विधि का उपयोग करना आमतौर पर सूची संसाधन पर उपयोग किए जाने पर एक तत्व जोड़ने के लिए किया जाता है, लेकिन आप इस विधि के लिए कई क्रियाओं का समर्थन भी कर सकते हैं। इस उत्तर को देखें: एक रिसोर्स रिसोर्स कलेक्शन को कैसे अपडेट करें । आप इनपुट के लिए विभिन्न प्रतिनिधित्व स्वरूपों का भी समर्थन कर सकते हैं (यदि वे किसी सरणी या एकल तत्वों के अनुरूप हैं)।
मामले में, अपडेट का वर्णन करने के लिए अपने प्रारूप को परिभाषित करना आवश्यक नहीं है।
एक PATCH
विधि का उपयोग करना भी उपयुक्त है क्योंकि संबंधित अनुरोध आंशिक अद्यतन के अनुरूप हैं। RFC5789 ( http://tools.ietf.org/html/rfc5789 ) के अनुसार :
हाइपरटेक्स्ट ट्रांसफर प्रोटोकॉल (HTTP) को बढ़ाने वाले कई एप्लिकेशन को आंशिक संसाधन संशोधन करने के लिए एक सुविधा की आवश्यकता होती है। मौजूदा HTTP PUT विधि केवल एक दस्तावेज़ के पूर्ण प्रतिस्थापन की अनुमति देती है। यह प्रस्ताव एक मौजूदा HTTP संसाधन को संशोधित करने के लिए एक नया HTTP विधि, PATCH जोड़ता है।
मामले में, आपको आंशिक अद्यतन का वर्णन करने के लिए अपने प्रारूप को परिभाषित करना होगा।
मुझे लगता है कि इस मामले में, 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
वापस आ जाएगी और यह प्रतिक्रिया प्रतिनिधित्व पर निर्भर है कि क्या किया गया था और आखिरकार त्रुटियां कहां हुईं। ElasticSearch के बल्क अपडेट के लिए इसके REST API में एक समापन बिंदु है। यह आपको इस स्तर पर कुछ विचार दे सकता है: http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/bulk.html ।
आप प्रदान किए गए डेटा को संभालने के लिए एक अतुल्यकालिक प्रसंस्करण को भी लागू कर सकते हैं। इस स्थिति में, HTTP स्थिति रिटर्न होगा 202
। क्लाइंट को यह देखने के लिए एक अतिरिक्त संसाधन खींचने की आवश्यकता है कि क्या होता है।
खत्म करने से पहले, मैं यह भी नोटिस करना चाहता हूं कि ओडटा विनिर्देश नेविगेशन लिंक नाम की सुविधा के साथ संस्थाओं के बीच संबंधों के मुद्दे को संबोधित करता है । शायद तुम इस पर एक नज़र हो सकता है ;-)
निम्नलिखित लिंक भी आपकी मदद कर सकते हैं: https://templth.wordpress.com/2014/12/15/designing-a-web-api/ ।
आशा है कि यह आपकी मदद करता है, थियरी
GET /docs
एक विशेष बाइंडर के भीतर सभी डॉक्स को कॉल और पुनः प्राप्त करता हूंGET /docs?binder_id=x
। हटाने के लिए संसाधनों का एक सबसेट मैं कहेंगेDELETE /docs?binder_id=x
या मैं फोन करना चाहिएDELETE /docs
एक साथ{"binder_id": x}
अनुरोध शरीर में? क्या आप कभीPATCH /docs?binder_id=x
बैच अपडेट के लिए उपयोग करेंगे , या सिर्फPATCH /docs
और जोड़े पास करेंगे?