वर्तमान में WebApi और WCF डेटा सेवाओं के बीच अन्य प्रमुख अंतर हैं, जिनका कोई भी उल्लेख नहीं करता है। काश एमएस एक अच्छे लेख के साथ दोनों की तुलना करता।
मैं थोड़ी देर के लिए और वेबएपीआई के बाद भी ओडता का पालन कर रहा हूं। मैंने हमेशा कुछ प्रमुख भेद पाए हैं।
पहले, मुझे यकीन नहीं है कि आपके बॉस का अर्थ है "एमएस वेबएपी का समर्थन कर रहा है", इसका मतलब है कि वे ओडिटा का समर्थन नहीं कर रहे हैं ?? IMO, वे दोनों का समर्थन कर रहे हैं और वर्तमान में कुछ न्यूनतम ओवरलैप है। Windows Azure Data Market, OData का उपयोग करके अपने डेटा को उजागर करता है, Azure टेबल स्टोरेज OData का उपयोग करता है, SharePoint 2010 डेटा पर ओवरडेट क्वेरीज़ की अनुमति देता है, और MS से अन्य उत्पाद भी इसका समर्थन कर रहे हैं, जैसे Excel PowerPivot। जब यह रिलेशनल डेटा की बात आती है तो यह एक बहुत शक्तिशाली क्वेरी फ्रेमवर्क है। और क्योंकि यह RESTful है, कोई भी भाषा, ढांचा, उपकरण, आदि इसके साथ एकीकृत कर सकते हैं।
यहाँ मुझे ओडटा + डब्ल्यूसीएफ डेटा सेवाओं के बारे में क्या पसंद है:
OData + WCF डेटा सेवाओं ने अंततः वेब पर डेटा की क्वेरी करते समय क्लाइंट एप्लिकेशन को अधिक "अभिव्यंजक" होने की अनुमति दी है। इससे पहले, हमें हमेशा कठोर वेब APIs के निर्माण के लिए ASMX या WCF का उपयोग करना पड़ता था, जो अनजाने में हो जाते हैं और जब भी UI कुछ अलग करना चाहता है तो उसे निरंतर परिवर्तनों की आवश्यकता होती है। क्लाइंट अनुप्रयोग केवल मापदंडों को निर्दिष्ट कर सकता है कि कौन से मापदंड को वापस करना है। या जैसे मैंने किया था और LINQ एक्सप्रेशंस को "सीरियलाइज़" करें और उन्हें पैरामीटर्स के रूप में पास करें और Expressions<Func<T,bool>>
सर्वर पर फिर से हाइड करें । इसका सभ्य है। काम मिल गया है, लेकिन मैं क्लाइंट पर LINQ का उपयोग करना चाहता हूं और इसे REST का उपयोग करके वेब पर अनुवादित किया है, जो कि ओडटा अनुमति देता है और मैं समाधान के अपने "हैक" का उपयोग नहीं करना चाहता।
यह एक DB कनेक्शन स्ट्रिंग की आवश्यकता के बिना "ट्रांसपोर्ट एसक्यूएल" को उजागर करने जैसा है। बस एक Url और whoala प्रदान करें! क्वेरी करना प्रारंभ करें। बेशक, वेबएपीआई और डब्ल्यूसीएफ डेटा सेवा दोनों प्रमाणीकरण / प्राधिकरण का समर्थन करते हैं, इसलिए आप पहुंच को नियंत्रित कर सकते हैं, भूमिकाओं या अन्य डेटा कॉन्फ़िगरेशन के आधार पर अतिरिक्त "कहां" बयान जोड़ सकते हैं। मैं इसे SQL की तुलना में अपने वेब एपी लेयर में करना चाहूंगा (जैसे कि व्यू या स्टोर किए गए प्रॉक् स का निर्माण)। और अब जब एप्लिकेशन स्वयं ही प्रश्नों का निर्माण कर सकते हैं, तो आप विज्ञापन-हॉक और बीआई रिपोर्टिंग उपकरण देखेंगे जो ओडटा का लाभ उठाना शुरू कर देंगे और उपयोगकर्ताओं को अपने स्वयं के परिणामों को परिभाषित करने की अनुमति देंगे। स्टेटिक रिपोर्ट्स पर भरोसा न करना जहां उनका न्यूनतम नियंत्रण है।
सिल्वरलाइट, विंडोज 8 मेट्रो, या ASP.NET (MVC, WebForms, आदि) में विकसित होने पर, आप केवल WCF डेटा सेवा के लिए Visual Studio में "सेवा संदर्भ" जोड़ सकते हैं और डेटा को क्वेरी करने के लिए LINQ का उपयोग करना शुरू कर सकते हैं और आपको एक अरबी मिल जाएगी क्लाइंट पर "डेटा संदर्भ", जिसका अर्थ है कि यह परिवर्तनों को ट्रैक करता है और आपको अपने परिवर्तनों को सर्वर पर वापस "सबमिट" करने की अनुमति देता है। यह सिल्वरलाइट के लिए आरआईए सर्विसेज के लिए बहुत उपयोगी है। मैंने RIA सेवाओं के बजाय WCF डेटा सेवाओं का उपयोग किया होगा, लेकिन उस समय, यह DataAnnotations या Actions का समर्थन नहीं करता था, लेकिन अब यह करता है :) RC सेवाओं पर WCF डेटा सेवाओं का एक और लाभ है, जो कि "अनुमान" करने की क्षमता है क्लाइंट से। यह प्रदर्शन के साथ मदद कर सकता है, मुझे लगता है कि मैं सभी संपत्तियों को एक इकाई से वापस नहीं करना चाहता। "डेटा संदर्भ" होने से
यदि आपके पास रिश्तों के साथ डेटा है, खासकर यदि आप SQL सर्वर और एंटिटी फ्रेमवर्क का उपयोग कर रहे हैं, तो WCF डेटा सेवाएँ बहुत अच्छी हैं। आप बहुत ही कम कोड के साथ REST पर क्वेरएबल डेटा + एक्ट्स (कॉल को चालू करने के लिए कॉल, अर्थात वर्कफ़्लोज़, बैकग्राउंड प्रोसेस) को उजागर कर पाएंगे। WCF डेटा सेवाएँ अभी अपडेट की गई थीं। नई रिलीज हुई। सभी नई कार्यक्षमता की जाँच करें।
WCF डेटा सेवाओं के लिए नकारात्मक पक्ष "नियंत्रण" है जो आप HTTP स्टैक पर ढीला करते हैं। मैंने पाया कि सबसे बड़ा दोष उन IQueryable<T>
तरीकों में था जो कलेक्शन लौटाते हैं। आरआईए सेवाओं और वेबएपीआई के विपरीत, आपके पास IQueryable विधि में तर्क विकसित करने के लिए पूर्ण पहुंच नहीं है। RIA Services और WebApi में, जब तक आप वापस आते हैं, तब तक आप जो चाहें कोड लिख सकते हैं IQueryable<T>
। WCF डेटा सेवाओं में, आपको केवल Expression<Func<T,bool>>
इंटरसेप्टर विधियों का उपयोग करके "कहां" स्टेटमेंट को जोड़ने की सुविधा मिलती है । मुझे यह निराशाजनक लगा। हमारा वर्तमान एप्लिकेशन RIA सेवाओं का उपयोग करता है और मुझे लगता है कि हमें वास्तव में IQueryable लॉजिक को नियंत्रित करने की क्षमता की आवश्यकता है। मुझे उम्मीद है कि मैं इस पर गलत हूं और मुझे कुछ याद आ रहा है
इसके अलावा, WCF डेटा सेवाएँ अभी भी पूरी तरह से सभी LINQ ऑपरेटर्स का समर्थन नहीं करती हैं। यह अभी भी WebApi से अधिक का समर्थन करता है।
WebApi के बारे में क्या ???
- मुझे Http Request / Response पर नियंत्रण पसंद है
- इसका पालन करना आसान है (एमवीसी पैटर्न का लाभ उठाते हुए)। मुझे यकीन है कि अधिक टूलींग आ जाएगा।
अब तक (मेरी समझ में), क्लाइंट (यानी सिल्वरलाइट, ASP.NET सर्वर-साइड कोड, आदि) पर कोई "डेटा संदर्भ" समर्थन नहीं है, क्योंकि WebApi वास्तव में WCF डेटा सेवाओं / OData जैसे इकाई डेटा मॉडल के बारे में नहीं है है। यह IQueryable / IEnumerable का उपयोग करके मॉडल ऑब्जेक्ट के संग्रह को बेनकाब कर सकता है, लेकिन क्लाइंट पर एक बार एंटिटी लोड होने के बाद कोई प्राथमिक कुंजी / विदेशी कुंजी "नेविगेशन गुण" (यानी ग्राहक। इनवॉइस) का उपयोग करने के लिए नहीं है, क्योंकि कोई "डेटा संदर्भ" नहीं है। जो उन्हें अतुल्यकालिक रूप से लोड करता है (या $ का उपयोग करके एक कॉल में), और परिवर्तनों का प्रबंधन करता है। आपके पास क्लाइंट पर आपके इकाई डेटा मॉडल का कोई कोड-जनरेट किया गया "प्रतिनिधित्व" नहीं है, जैसे आप आरआईए सेवाओं या डब्ल्यूसीएफ डेटा सेवाओं में करते हैं। मैं यह नहीं कह रहा / सकती कि आपके डेटा का प्रतिनिधित्व करने वाले क्लाइंट में मॉडल नहीं हैं, लेकिन आपने मैन्युअल रूप से डेटा को पॉप्युलेट किया है और प्रबंधित किया है कि "इनवॉइस" को वेब पर पुनर्प्राप्त करने के बाद प्रत्येक "ग्राहक" के साथ सेट किया जाना है। यह मुश्किल हो सकता है, विशेष रूप से सभी Async सामान के साथ चल रहा है। आप नहीं जानते कि कौन सी कॉल पहले वापस आएंगी। यहाँ व्याख्या करना कठिन हो सकता है, लेकिन RIA सेवा या "डेटा संदर्भ" सामग्री के बारे में अभी पढ़ेंWCF डेटा सेवाएँ । बिजनेस लाइन के साथ काम करते समय, यह मेरे लिए प्रमुख मुद्दा है। यह मुख्य रूप से उत्पादकता और स्थिरता पर आधारित है। आप डेटा कॉन्टेक्ट के बिना एप्लिकेशन का निर्माण कर सकते हैं। यह सिर्फ चीजों को आसान बनाता है, विशेष रूप से सिल्वरलाइट, डब्ल्यूपीएफ और अब विंडोज 8 मेट्रो में। संबंधपरक एंटिटीज को मेमोरी में अतुल्यकालिक रूप से लोड करना और टू-बाइंडिंग होना वास्तव में अच्छा है।
कहा जाता है कि, इसका मतलब यह है कि किसी दिन WebApi क्लाइंट पर "डेटा संदर्भ" का समर्थन कर सकता है? मुझे लगता है कि यह हो सकता है। इसके अलावा, अधिक टूलिंग के साथ, एक विजुअल स्टूडियो प्रोजेक्ट डेटाबेस स्कीमा (या एंटिटी फ्रेमवर्क) के आधार पर आपके सभी सीआरयूडी तरीकों को उत्पन्न कर सकता है।
इसके अलावा, मुझे पता है कि मैं केवल .NET .NET .NETs का उल्लेख कर रहा हूं, जब यह WCF डेटा सेवाओं या वेबएपीआई के साथ काम करने की बात आती है, लेकिन मुझे पता है कि HTML / JS भी एक प्रमुख खिलाड़ी है। मैं सिर्फ सिल्वरलाइट UI, या ASP.NET सर्वर-साइड कोड, आदि के साथ काम करने के दौरान मिलने वाले लाभों का उल्लेख कर रहा था। मुझे विश्वास है कि HTML5 / जावास्क्रिप्ट में "IndexedDB" के आगमन के साथ "डेटा संदर्भ" और एक नाम है JavaScript में LINQ फ्रेमवर्क भी उपलब्ध हो सकता है, जिससे OData Services को जावास्क्रिप्ट से और भी आसान बनाया जा सकता है (आप डेटाटा का उपयोग आज OData के साथ कर सकते हैं)। इसके अलावा, HTML / JS में MVVM और बाइंडिंग का समर्थन करने के लिए नॉकआउटJS का उपयोग करके, यह एक हवा बना देगा :)
मैं वर्तमान में शोध कर रहा हूं कि किस प्लेटफॉर्म का उपयोग करना है। मुझे इसका उपयोग करके खुशी होगी, लेकिन मैं इस तथ्य के आधार पर ओडता की ओर झुकाव करता हूं कि मेरा अगला एप्लिकेशन मुख्य रूप से Analytics (रीड-ओनली) के बारे में है और मैं एक समृद्ध अभिव्यंजक Restful Api चाहता हूं। मेरा मानना है कि OData + WCF डेटा सेवाएँ मुझे वह देता है क्योंकि WebApi केवल कलेक्शन पर $ टेक, $ स्किप, $ फ़िल्टर, $ ऑर्डरबी का समर्थन करता है। यह अनुमानों का समर्थन नहीं करता है, इसमें ($ विस्तार) शामिल है, आदि में मेरे पास बहुत सारे "अपडेट / डिलीट / इंसर्ट" नहीं हैं और हमारा डेटा काफी रिलेशनल है।
मुझे उम्मीद है कि अन्य लोग चर्चा में शामिल होंगे और अपने विचार देंगे। मैं अभी भी निर्णय कर रहा हूं और अन्य राय सुनना पसंद करूंगा। मुझे वास्तव में लगता है कि दोनों ही रूपरेखाएं महान हैं। मुझे आश्चर्य है कि अगर आपको भी चुनना है, तो आवश्यकता होने पर दोनों का उपयोग क्यों न करें। ग्राहक से यह सभी के बारे में वैसे भी कॉल कर रहे हैं। सिर्फ एक विचार :)