मान लीजिए कि आप अपने एप्लिकेशन सेवाओं में तोड़ रहे हैं। क्या एसओए के दृष्टिकोण को अपनाने के लिए कोई अच्छा कारण हैं? बस एक पुस्तकालय एपीआई का निर्माण करना है जिसे उन अनुप्रयोगों द्वारा लोड किया जा सकता है जिन्हें इसकी आवश्यकता है।
मान लीजिए कि आप अपने एप्लिकेशन सेवाओं में तोड़ रहे हैं। क्या एसओए के दृष्टिकोण को अपनाने के लिए कोई अच्छा कारण हैं? बस एक पुस्तकालय एपीआई का निर्माण करना है जिसे उन अनुप्रयोगों द्वारा लोड किया जा सकता है जिन्हें इसकी आवश्यकता है।
जवाबों:
दोनों के बीच अंतर सूक्ष्म हो सकता है। उदाहरण के लिए .NET की दुनिया में, आपके पास एक ऐसा एप्लिकेशन हो सकता है जो एक अंतिम उपयोगकर्ता के लिए अखंड जैसा महसूस होगा और जो एक ही मशीन पर काम करेगा, लेकिन अंदर, WCF सेवाओं के एक समूह में अलग हो जाएगा। आपके पास ऐसे आर्किटेक्चर भी हो सकते हैं जहां लाइब्रेरीज़ दृढ़ता से जुड़ी हुई नहीं हैं (एडिंस / प्लगइन्स) और एक दूसरे से बात करते समय एक प्रोटोकॉल का पालन कर रहे हैं।
यदि हम उन मध्यस्थ मामलों के बारे में बात करने से बचते हैं, और केवल दृढ़ता से जुड़े एपीआई पुस्तकालय बनाम एक अलग आरईएस सेवा से निपटते हैं, तो आप निम्नलिखित बिंदुओं पर विचार करना चाह सकते हैं:
लाइब्रेरी API को उसी मशीन पर कहा जाता है। सेवाओं को कहीं भी होस्ट किया जा सकता है और कहीं से भी कॉल किया जा सकता है। यदि आप प्रदर्शन / स्केलेबिलिटी / सुरक्षा कारणों से कई मशीनों पर एप्लिकेशन को होस्ट कर रहे हैं, तो संभावना है कि आपको सेवाओं का उपयोग करना होगा।
स्थिति समान है जब यह कई मशीनों पर तैनात एक अनुप्रयोग द्वारा एक सेवा का उपयोग करने के लिए जाता है। उदाहरण के लिए यदि आप कुछ वित्तीय संगणना करने वाले बैंक के लिए आवेदन कर रहे हैं, तो एक तरीका यह है कि हर डेस्कटॉप पर पूरे बड़े एप्लिकेशन को तैनात किया जाए, और हर ग्राहक को बड़े आकार के अपडेट करने के लिए मजबूर किया जाए; एक और तरीका यह होगा कि सर्वर पर कम्प्यूटेशन पार्ट को होस्ट किया जाए, और डेस्कटॉप के लिए केवल यूआई और उन सर्वर पर कॉल का एक गुच्छा के साथ एक हल्के ऐप को तैनात किया जाए।
यदि आप एक REST सेवा की मेजबानी कर रहे हैं, तो कोई भी इसका उपयोग कर सकता है: एक मैक उपयोगकर्ता, लिनक्स का उपयोग करने वाला व्यक्ति, आदि। यदि आपने विजुअल स्टूडियो के साथ C # लाइब्रेरी बनाई है और आप इसे DLL के रूप में वितरित करते हैं, तो उपयोगकर्ताओं (ग्राहकों के बारे में) को भूल जाएं। ;) जिनके पास विंडोज नहीं है।
सेवाओं का एक और फायदा यह है कि जब आप सेवा को अपडेट करते हैं, तो इसे तुरंत सेवा के सभी उपभोक्ताओं के लिए तैनात किया जाता है। इसलिए यदि आपने बग, या प्रदर्शन समस्या को ठीक कर लिया है, तो सभी को लाभ मिलता है जैसे ही अपडेटेड सेवा लाइव होती है, इसके बजाय एक अपडेट वितरित करने के लिए जिसे लोग अनदेखा करना चुन सकते हैं।
पुस्तकालय लाभ:
सेवा लाभ:
एक SOA दृष्टिकोण विभिन्न सेवाओं को होस्ट करने और अलग से बनाए रखने की अनुमति देता है। कोड के अलावा, किसी विशेष सेवा को तैनात करने के लिए बहुत सारे विशेष कॉन्फ़िगरेशन (पासवर्ड, पोर्ट, प्रमाण पत्र, आदि) की आवश्यकता हो सकती है। REST सेवा का उपयोग करने की एक जटिल मात्रा होती है जिसे स्पष्ट रूप से प्रलेखित और आसानी से समझा जा सकता है। यह अधिक सुरक्षित है क्योंकि इसका मतलब है कि आपको ग्राहकों को डीबी या अन्य संसाधनों तक पहुंच प्रदान करने की आवश्यकता नहीं है।
यदि SOA सेवा में कोई परिवर्तन होता है, तो उस SOA सेवा को पुनर्विकास, सेवानिवृत्त और पुनर्परिभाषित करना होगा। उस सेवा का उपभोग करने वाले सभी एप्लिकेशन ऐसा करना जारी रख सकते हैं। DLL में लाइब्रेरी में बदलाव का मतलब होगा कि उस लाइब्रेरी के सभी उपभोक्ताओं को यह संदर्भित करने के लिए पुनर्विकास करना होगा कि DLL, उन्हें सभी को सेवानिवृत्त करना होगा और उन्हें सभी को फिर से तैयार करना होगा। यह भी खतरा है कि यह ठीक से नहीं हो सकता है, और विभिन्न अनुप्रयोगों में DLL के विभिन्न संस्करण होंगे। कभी-कभी यह एक समस्या नहीं हो सकती है - शायद हर सिस्टम में लाइब्रेरी का संस्करण होना चाहिए जो तैनाती के समय मौजूद था (आपने मददगार नई सुविधाओं के लिए अपने लॉगिंग सिस्टम को अपडेट किया होगा - क्या आप वास्तव में हैंइसके साथ हर प्रणाली को अद्यतन करने की आवश्यकता है?) इस मामले में एक पुस्तकालय ठीक है। लेकिन कहते हैं कि आपके पास कर दर की गणना के लिए एक सेवा है, और कर कानून बदलते हैं। आप इस बदलाव को शामिल करने के लिए हर सिस्टम को अपडेट करना नहीं चाहते हैं, यह एक जगह पर करना बेहतर होगा। इस मामले में एक सेवा एक बेहतर विकल्प है।
कई अच्छे उत्तर हैं, लेकिन मैं दिए गए उत्तरों में और चीजें जोड़ना चाहूंगा:
एपीआई लाइब्रेरी विधि बहुत उपयोगी है जब आप चीजों को जितना संभव हो उतना कम ओवरहेड के साथ बातचीत करना चाहते हैं। परिणाम यह है कि एपीआई और इसके उपयोग वाले अनुप्रयोगों के बीच एक उच्च युग्मन है। कभी-कभी, यह आवेदन के लिए ठीक है और यहां तक कि आवश्यक भी है, हालांकि यदि आपके पास बहुत वितरित प्रणाली है या आपको लगता है कि अंतरनिर्धारण एक बहुत बड़ा मुद्दा है, तो आपको बाद में एक कदम ऊपर जाने और संचार के अन्य तरीकों का उपयोग करने की आवश्यकता हो सकती है। विशेष रूप से, यदि आप एक वितरित प्रणाली चाहते हैं, तो SOAP SOA में अगले चरण की तरह है, लेकिन आप अभी भी इकाइयों के बीच निर्भरता से बचे रहेंगे, क्योंकि उन्हें एक-दूसरे की प्रक्रियाओं को जानना होगा। REST इसे एक एकीकृत स्तर पर अन्य सेवाओं पर सामग्री के बारे में कुछ सीखने की अनुमति देकर मशीन को एक नए स्तर पर ले जाता है।
आपके मामले में, यदि आपका आवेदन वितरित नहीं किया गया है, तो मुझे आपके आवेदन को SOA में बदलने का कोई कारण नहीं दिखता है।