मैं एक विश्वसनीय API विकसित कर रहा हूं। यह मेरा पहला एपीआई है, लेकिन मेरा पहला वास्तव में बड़ा कोडिंग प्रोजेक्ट भी है। जैसे, मैं अभी भी वास्तुकला के बारे में बहुत सीख रहा हूँ आदिरीस्टफुल एपीआई: मुझे अपना वर्कफ़्लो कहां कोड करना चाहिए?
वर्तमान में, मैं निम्नलिखित परतों में मेरी एपीआई सेटअप:
- HTTP परत
- संसाधन लेयर
- डोमेन मॉडल/व्यापार तर्क परत
- डेटा एक्सेस/भंडार लेयर
- स्थायी संग्रहण/डीबी लेयर
मुद्दा मैं पल रहा है, जहां मैं कार्यप्रवाह वस्तुओं/प्रबंधकों डाल करने की आवश्यकता है पर में चलाने है? वर्कफ़्लो द्वारा, मेरा मतलब कोड है जो मूल्यांकन करता है कि अंतिम उपयोगकर्ता द्वारा अगला चरण आवश्यक है। उदाहरण के लिए, एक ई-कॉमर्स वर्कफ़्लो। उपयोगकर्ता टोकरी में आइटम जोड़ता है, फिर चेक आउट करता है, फिर व्यक्तिगत विवरण भरता है, फिर भुगतान करता है। कार्यप्रवाह निर्णय लेने के लिए ज़िम्मेदार होगा कि कौन से कदम आगे हैं, बल्कि किन कदमों की अनुमति नहीं है। उदाहरण के लिए, उपयोगकर्ता व्यक्तिगत विवरण दर्ज करने से पहले भुगतान करने का प्रयास करके एपीआई में त्रुटियों का कारण नहीं बना सकता (शायद वे भुगतान के लिए यूआरआई को याद करते हैं और एक कदम छोड़ने का प्रयास करते हैं)। वर्कफ़्लो यह देखने के लिए जांच करेगा कि पिछले सभी चरणों को पूरा कर लिया गया है, यदि नहीं, तो भुगतान की अनुमति नहीं होगी।
वर्तमान में, मेरी कार्यप्रवाह तर्क संसाधन परत में है। मैं उपयोगकर्ता को वर्कफ़्लो प्रस्तुत करने के लिए हाइपर्मियाडिया लिंक का उपयोग कर रहा हूं उदा। एक 'अगला कदम' लिंक प्रदान करना। मेरे पास समस्या यह है कि संसाधन परत एक शीर्ष स्तर की परत है, और प्रस्तुति के साथ अधिक गठबंधन है। मैं यह अंतर्निहित डोमेन मॉडल को प्रभावी ढंग से एक कार्यप्रवाह यानी यह पता करने के लिए यह भुगतान अनुमति देने से पहले personal_detail
रों इकाई की जाँच करने के है की आवश्यकता होगी का मूल्यांकन करने के बारे में जानने की बहुत अधिक जरूरत महसूस करते हैं।
यह अब मुझे यह सोच कर कि वर्कफ़्लो डोमेन मॉडल से संबंधित होता है। यह बहुत अधिक समझ में आता है, क्योंकि वास्तव में वर्कफ़्लो व्यवसाय तर्क का हिस्सा हैं और मुझे लगता है कि डोमेन परत में सबसे अच्छा रखा गया है। आखिरकार, किसी अन्य चीज़ के साथ संसाधन परत को प्रतिस्थापित करें, और आपको अभी भी अंतर्निहित वर्कफ़्लो की आवश्यकता होगी।
लेकिन अब समस्या यह है कि कई डोमेन वस्तुओं के आवश्यक ज्ञान कार्यप्रवाह उनके तर्क को पूरा करने के लिए है। अब यह सही लगता है कि यह शायद अपनी परत में चला जाता है? संसाधन और डोमेन परत के बीच?
- HTTP परत
- संसाधन लेयर
- कार्यप्रवाह लेयर
- डोमेन मॉडल/व्यापार तर्क परत
- डेटा एक्सेस/भंडार लेयर
- स्थायी संग्रहण/डीबी लेयर
मैं बस सोच रहा हूं कि क्या किसी के पास इस के आसपास कोई अन्य विचार या विचार था? जैसा कि मैंने कहा, मेरे पास यह जानने के लिए कोई पिछला अनुप्रयोग अनुभव नहीं है कि वर्कफ़्लो कहां रखा जाना चाहिए। मैं वास्तव में पहली बार यह सीख रहा हूं इसलिए यह सुनिश्चित करना चाहता हूं कि मैं इसके बारे में सही तरीके से जा रहा हूं। लेख या ब्लॉग पर
लिंक है कि इस कवर बहुत सराहना की जाएगी। विभिन्न कार्यान्वयन पर पढ़ने के लिए प्यार।
संपादित
स्पष्ट करने के लिए, मैं रिलीज कि HATEOAS ग्राहक 'कार्यप्रवाह' के माध्यम से नेविगेट करने के लिए अनुमति देता है, लेकिन वहाँ मेरी एपीआई में कुछ ऐसा है जो जानता है कि यह यानी दिखाने के लिए लिंक वास्तव में कार्यप्रवाह है कि परिभाषित करने है क्या होना चाहिए की अनुमति दी। यह संसाधन में वर्कफ़्लो संबंधित लिंक प्रस्तुत करता है, लेकिन इसके अतिरिक्त यह सत्यापित करता है कि अनुरोध वर्कफ़्लो के साथ समन्वयित हैं। जबकि मैं मानता हूँ कि एक ग्राहक शायद ही संसाधन, बाकी के खतरे (और सुंदरता) में दिए गए लिंक का पालन करेंगे, कि अपनी यूआरआई संचालित है, तो एक शरारती 'छोड़' के लिए द्वारा कार्यप्रवाह में कदम की कोशिश कर ग्राहक को रोकने के कोई बात नहीं है यूआरआई में एक शिक्षित अनुमान बनाते हुए। एपीआई को यह पता लगाने और 302 प्रतिक्रिया वापस करने की जरूरत है।
मैंने जो कहा है उससे असहमत हूं। एक आरईएसटी एपीआई उपयोगकर्ता को ऐप के माध्यम से 'वर्कफ़्लो' परिभाषित करने के लिए हैटओएएस का उपयोग करता है। लेकिन आप जो कह रहे हैं वह है कि हमें उपयोगकर्ता (या क्लाइंट ऐप) को तर्क को परिभाषित करने और कुछ भी करने के लिए अनुमति देना चाहिए !! यह स्पष्ट रूप से गलत है। तो मैं किस बारे में बात कर रहा हूं यह सुनिश्चित कर रहा है कि क्लाइंट का अनुसरण करने वाले 'वर्कफ़्लो' की अनुमति है। एपीआई का कुछ हिस्सा संसाधन (वर्कफ़्लो) के साथ किन लिंकों को प्रदर्शित करने की अनुमति देने के लिए ज़िम्मेदार होना चाहिए और यह भी सत्यापित करना है कि अनुरोध वर्कफ़्लो के बाहर नहीं हैं (उदाहरण के लिए 302 लौटाएं) –
से ऊपर अपडेट देखें क्योंकि सर्वर है क्लाइंट को जावास्क्रिप्ट प्रदान करना जो ग्राहक यह निर्धारित करने के लिए उपयोग करता है कि कोई लिंक प्रदर्शित करना है या नहीं, सर्वर अनिवार्य रूप से क्लाइंट पर अपना तर्क बढ़ा रहा है, और इस प्रकार वर्कफ़्लो को निर्धारित कर रहा है। यूआई और आरईएसटी सेवाओं के बीच अपने आर्किटेक्चर में व्यवसाय परत को इंजेक्शन देने से रोकने के लिए कुछ भी नहीं है, लेकिन जब आप ऐसा करते हैं, तो आप इसे कैसे कार्यान्वित करते हैं, इस पर निर्भर करते हुए, आपका यूआई अब और अधिक संचार नहीं कर सकता है। –
और यह व्यवसाय परत कहाँ रहती है? –