यहाँ कुछ अच्छे जवाब हैं, लेकिन मुझे यकीन नहीं है कि वे आपके सहकर्मियों को समझाने में आपकी मदद करेंगे। जैसा कि कई लोगों ने बताया है कि आप जो सुझाव दे रहे हैं, वह रेस्टफुल डिज़ाइन से हटकर नहीं है, और मुझे लगता है कि उन्हें आपके प्रस्ताव के साथ बोर्ड पर लाना महत्वपूर्ण है।
REST यह सुनिश्चित करने के बारे में नहीं है कि आपका API केवल डेटा संग्रहीत और पुनर्प्राप्त करने की अनुमति देता है। बल्कि, यह संसाधनों के रूप में मॉडलिंग क्रियाओं से संबंधित है । आपके एपीआई को कार्रवाई करने में सक्षम होना चाहिए (यह एक एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस है, सब के बाद)। सवाल यह है कि उन कार्यों को कैसे किया जाए।
एक शब्द के साथ आने के बजाय, उदाहरण शायद अपने सहकर्मियों को यह समझाने का सबसे अच्छा तरीका है । इस तरह से आप यह दिखा सकते हैं कि वे इसे अभी कैसे कर रहे हैं, इससे क्या समस्याएं होती हैं, एक समाधान जो समस्या को हल करता है, और यह कैसे अभी भी बाकी है।
आइए अपने ग्राहक ऑब्जेक्ट को देखें।
संकट:
UI POST एक ग्राहक है, लेकिन बाद की सारणी अभी तक अपडेट नहीं की गई है। यदि आपके UI कोड (या ब्राउज़र प्लग इन, दुर्व्यवहार) में त्रुटि के कारण बाद की कॉल में से एक विफल हो जाती है तो क्या होगा? अब आपका डेटा असंगत स्थिति में है। यह एक ऐसा राज्य भी हो सकता है जो आपके एपीआई या यूआई के अन्य हिस्सों को तोड़ता है, यह उल्लेख करने के लिए नहीं कि यह केवल अमान्य है। आप कैसे ठीक हो? आपको यह सुनिश्चित करने के लिए हर संभव स्थिति का परीक्षण करना होगा कि यह कुछ टूट नहीं जाएगा, लेकिन यह जानना कठिन होगा कि क्या संभव है।
समाधान:
ग्राहकों को बनाने के लिए एक एपीआई एंडपॉइंट बनाएं। आप जानते हैं कि आप "/ ग्राहक / निर्माण" या सम्मिलित नहीं करना चाहते हैं / "ग्राहक बनाएँ" समापन बिंदु, क्योंकि बनाना एक क्रिया है और REST का उल्लंघन होगा। इसलिए इसे संज्ञा दें। "" ग्राहक-निर्माण "काम कर सकता है। अब जब आप अपने CustomerCreation ऑब्जेक्ट को पोस्ट करते हैं, तो यह ग्राहक के लिए सभी आवश्यक फ़ील्ड को पूरी तरह से बनाने के लिए भेज देगा। समापन बिंदु यह सुनिश्चित करेगा कि डेटा पूर्ण और वैध है (400 या कुछ लौटाता है यदि यह सत्यापन विफल हो जाता है), और उदाहरण के लिए, सभी एकल डीबी लेनदेन में जारी रह सकता है।
यदि आपको GET / ग्राहक वस्तुओं के लिए एक समापन बिंदु की आवश्यकता है, तो यह ठीक है। आपके पास दोनों हो सकते हैं। ट्रिक एंडपॉइंट बनाने के लिए है जो उपभोक्ताओं की जरूरतों को पूरा करती है।
लाभ:
- आप गारंटी देते हैं कि आप खराब स्थिति के साथ समाप्त नहीं होंगे
- यह यूआई देवों पर वास्तव में आसान है अगर उन्हें अनुरोधों, सत्यापन चिंताओं, आदि के "पता" को नहीं करना है
- यह नेटवर्क अनुरोधों की विलंबता को कम करते हुए, एपीआई की बात नहीं है
- परिदृश्यों का परीक्षण करना और उन्हें समझना आसान है (UI से डेटा के गुम / विकृत टुकड़े अनुरोधों में नहीं फैले हैं, जिनमें से कुछ निम्नलिखित हो सकते हैं:)
- यह व्यापार तर्क के बेहतर एनकैप्सुलेशन की अनुमति देता है
- आम तौर पर सुरक्षा को आसान बनाता है (क्योंकि यूआई में व्यापार और आर्केस्ट्रा तर्क उपयोगकर्ताओं द्वारा संशोधित किया जा सकता है)
- तर्क दोहराव को कम करेगा (अधिक संभावना है कि आपके पास एपीआई के 2+ उपभोक्ताओं की तुलना में 2+ एपीआई होंगे जो समान डेटा तक पहुंच प्रदान करते हैं)
- फिर भी 100% रेस्टफुल
नुकसान:
- यह बैकएंड देव के लिए संभावित रूप से अधिक काम है (लेकिन लंबे समय में नहीं हो सकता है)
इस प्रतिमान को समझना लोगों के लिए मुश्किल हो सकता है और अगर उन्होंने इसे आजमाया नहीं है तो इसके बारे में क्या अच्छा है। उम्मीद है कि आप अपने स्वयं के कोड से एक उदाहरण का उपयोग करके उन्हें देखने में मदद कर सकते हैं।
मेरा अपना अनुभव है कि एक बार जब मेरी टीम के देवों ने इस रणनीति को लागू करना शुरू किया, तो उन्होंने लगभग तुरंत लाभ देखा।
आगे के अध्ययन:
थॉट्सवर्क्स के इस लेख से मुझे वास्तव में व्यावहारिक उदाहरणों का उपयोग करने वाली वस्तुओं के रूप में मॉडलिंग कार्यों का विचार प्राप्त करने में मदद मिली: https://www.thoughtworks.com/insights/blog/rest-ap-design-resource-modeling
मैं CQRS और ईवेंट सोर्सिंग पर पढ़ने का सुझाव भी दूंगा क्योंकि वे इस प्रकार की चीज़ों से वास्तव में चिंतित हैं (यानी वास्तविक दृढ़ता तर्क से आपके एपीआई को तलाक देना)। मुझे नहीं पता कि आपके सहकर्मी इस तरह की चीज़ को पढ़ने के लिए कितने तैयार होंगे, लेकिन यह आपको अधिक स्पष्टता दे सकता है और आपको उन्हें समझाने में मदद करेगा।