WCF डेटा सेवाएँ (OData) बनाम ASP.NET वेब एपीआई? हाइपरमीडिया?


12

मैं एक वितरित एप्लिकेशन को निष्क्रिय कर रहा हूं जिसमें REST सेवाओं और विभिन्न प्रकार के ग्राहक शामिल होंगे (सिल्वरलाइट, आईओएस, विंडोज फोन 7, आदि)। मैं यह तय करने के लिए तैयार था कि मैं WCF डेटा सर्विसेज (OData) का उपयोग करके अपनी REST सेवाओं को लागू करूंगा, लेकिन अब MVC 4 वेब एपीआई ने मुझे उस निर्णय पर प्रश्नचिह्न लगा दिया है।

मुझे ओडटा के बारे में जो पसंद आया वह था यूआरआई क्वेरी और हाइपरमीडिया क्षमताएं जो आपको मुफ्त में मिलती हैं। मुझे नापसंद था कि ओडटा पेलोड की वाचालता थी; तार पर आने वाले अनावश्यक चरित्र।

वेब एपीआई के बारे में मुझे जो पसंद है वह यह है कि पेलोड अधिक संक्षिप्त हैं और इसमें ओडटा की यूआरआई क्वेरी क्षमता है, हालांकि यह हाइपरमीडिया (बॉक्स से बाहर, कम से कम) की कमी लगती है। मेरा बॉस वेब एपीआई के लिए भी जोर दे रहा है क्योंकि "Microsoft पर जो शक्तियां हैं, वे इसे वापस कर रहे हैं और OData को कर्षण नहीं मिल रहा है।"

इसलिए मेरे दो सवाल हैं:

1) क्या कोई वेब API और OData के समर्थन / कर्षण पर टिप्पणी कर सकता है?

2) क्या वेब एपीआई को समय पर रिलीज होने से हाइपरमीडिया का समर्थन करने की उम्मीद है या क्या मुझे किसी भी ऑफ-द-शेल्फ कार्यान्वयन या उदाहरणों पर ध्यान देना चाहिए?

धन्यवाद!


2
प्रश्न 1 के अब तक के अच्छे उत्तर। किसी को भी मेरे दूसरे सवाल में कोई अंतर्दृष्टि है?
रेमंड सल्टेरेल्ली

किंडा चूक गया, और मैंने शब्द देख लिया है, लेकिन मुझे यकीन नहीं है कि एक तकनीकी अर्थ में हाइपरमीडिया क्या है - क्या आपके पास लिंक है?
व्याट बार्नेट 19

2
असल में, REST के संदर्भ में हाइपरमीडिया का अर्थ "आलसी भार" है। उदाहरण के लिए, यदि REST सेवा के लिए आपका अनुरोध किसी ऐसी वस्तु को लौटाता है, जिसमें किसी अन्य वस्तु का संदर्भ होता है, तो उस संदर्भ को XML दस्तावेज़ में एक लिंक के रूप में दर्शाया जाता है, क्योंकि यह संदर्भित वस्तु को संपूर्णता में शामिल करने का विरोध करता है। यदि आप संदर्भित ऑब्जेक्ट के बारे में जानकारी चाहते हैं, तो बस लिंक का अनुसरण करें। dret.net/lectures/ppos-spring11/reading/…
Raymond Saltrelli

1
रेस्ट के संबंध में हाइपरमीडिया का एक और अच्छा विवरण। timelessrepo.com/haters-gonna-hateoas
रेमंड Saltrelli

जवाबों:


2

वेब एपीआई odata करता है। स्कॉट गुथरी का ब्लॉग पोस्ट देखें । विशेष रूप से:

क्वेरी संरचना: वेब API आपको आसानी से OData URL सम्मेलनों के माध्यम से क्वेरी का समर्थन करने में सक्षम बनाता है। जब आप अपने वेब API से एक प्रकार का IQueryable लौटाते हैं, तो फ़्रेमवर्क स्वचालित रूप से उस पर OData क्वेरी समर्थन प्रदान करेगा - पेजिंग और सॉर्टिंग को लागू करना आसान बनाता है।

मुझे यह भी लगता है कि कई मामलों में एक ही वर्ग पारंपरिक डब्ल्यूसीएफ वर्ग और वेब एपीआई वर्ग हो सकता है, वे निश्चित रूप से परस्पर अनन्य नहीं हैं।


2

वेब एपीआई HTTP प्रोटोकॉल का अधिक मूल रूप से लाभ उठाता है। ओडाटा एक ओपन स्टैंडर्ड है जो बहुत सारे बड़े खिलाड़ियों द्वारा अपनाया जाता है। मैं केवल अपने अनुभव से ही ओडता के आसपास रहने के बारे में बात कर सकता हूं, और हाल ही में वेब एपीआई की खोज कर रहा हूं और कुछ शोध कर रहा हूं।

ओडटा शांत है क्योंकि यह एक वास्तविक मानक है। आप आसानी से एक डेटाबेस बना सकते हैं और इसे HTTP पर उजागर कर सकते हैं। इसका मतलब है कि आप किसी भी कॉन्फ़िगरेशन के बिना अपनी तालिका संरचना को पार कर सकते हैं (मैं कहता हूं कि शिथिल)। आप URL के माध्यम से क्वेरी भी चला सकते हैं जिसमें कुछ हल्का LINQ शामिल हो सकते हैं:

/products/orders/[put some linq-ish query here]

यह यकीनन अच्छा या बुरा है। प्रमाणीकरण मानक है और इसे बनाया गया है।

वेब एपीआई, मेरे दृष्टिकोण से अधिक दिलचस्प है। यह HTTP कार्यक्षमता (त्रुटि संदेश, एट अल।) का उपयोग करता है और असली रीस्टफुल अनुरोधों के लिए थोड़ा और "देशी" है। मैं वास्तव में इसके साथ बहुत अधिक नहीं खेला है .. लेकिन मैंने चारों ओर पढ़ा है और "सुना" की तरह है कि एमवीसी और वेब एपीआई किसी दिन "विवाहित" हो सकता है, फिर से, शायद अच्छा बुरा ...

जब मैं OData के साथ खेल रहा था, तो मैंने एक Stored Proc बनाया, इसे इकाई की सतह में मैप किया, एक मजबूत रिटर्न प्रकार कॉन्फ़िगर किया और फिर इसे URL अनुरोध और BANG तक झुका दिया, मेरा RESTful अनुरोध मेरे टाइप किए गए परिणाम खरीद के लिए मैप किया गया। यह काफी सीधा था, और मैं ठीक वही पाने में सक्षम था जो मुझे चाहिए था।

निष्कर्ष में मुझे WCF API के साथ बहुत अधिक विस्तार से खेलने का मौका नहीं मिला है, लेकिन मैं कहूंगा कि यह क्लाइंट के विकास के लिए रास्ता है क्योंकि यह REST के लिए एक शुद्ध दृष्टिकोण के अधिक है। यदि आप कम या ज्यादा "स्ट्रेट" बैक और आगे कॉल करने जा रहे हैं और "मॉडल देखें" को पुनः प्राप्त कर रहे हैं, तो यह अधिक देशी इंटरैक्शन प्रदान करेगा।

दूसरी ओर। यदि आप क्लाइंट इंटरैक्शन के आधार पर डेटा पर जटिल (ईश) प्रश्न बना रहे हैं और आप क्वेरी लॉजिक को "बिल्ड" करना चाहते हैं और इसे एक पैरामीटर के रूप में पास करना चाहते हैं, तो ओडाटा काम कर सकता है।

जिस तरह से मैं इसे देखता हूं, अगर मुझे अपने डेटा को एक संरचनात्मक प्रारूप (मतलब तालिका / संबंध संरचना) में उजागर करने की आवश्यकता है और फिर इसे सीधे एक ग्राहक बनाते हैं, तो ओडटा सबसे अच्छा काम करेगा। यह "दूसरों" को डेटा तक पहुंचने की अनुमति देने के लिए भी अच्छा है (उचित स्थिति आदि के साथ)) यही कारण है कि यह ओडटा प्रोटोकॉल का पालन करता है

यदि आप RESTful अनुरोध चाहते हैं, जहां आप URL (/ उत्पादों / ऑर्डर / 22, और अपने "छिपे हुए" प्रबंधित कोड और डेटा संरचना से जटिल "परिणाम सेट" बना रहे हैं और आप HTTP प्रतिक्रिया संदेशों से भी लाभान्वित हो सकते हैं, तो वेब एपीआई शायद सबसे अच्छा शर्त होगा ..

फिर, यह सब अनुसंधान और कर से है। मैंने किसी प्रोडक्शन / पूर्ण विकसित ऐप परिदृश्य में लागू नहीं किया है। मुझे लगता है कि वे दोनों अपनी ताकत और कमजोरियां लेंगे, और निश्चित रूप से कुछ ओवरलैप हैं


2

हाइपरमीडिया बिंदु से निश्चित रूप से वेब एपीआई। OData, जो AtomPub पर आधारित है, HTTP का उपयोग करके डेटाबेस को उजागर करने का एक तरीका है, आपको केवल पूर्वनिर्धारित राज्य स्थानांतरण (CRUD) का एक सीमित सेट मिलता है। दूसरी ओर, एक हाइपरमीडिया सेवा क्लाइंट के लिए एक एप्लीकेशन की तरह है। Web API से आप अपने इच्छित सभी लिंक को एम्बेड कर सकते हैं, साथ ही आप OData क्वेरी सिंटैक्स का भी उपयोग कर सकते हैं। वास्तव में, Microsoft स्टैक में सबसे अच्छा हाइपरमीडिया समाधान ASP.NET MVC है, यदि आप HTML को आधार प्रारूप के रूप में उपयोग करने के लिए तैयार हैं।


2
क्या वेब एपीआई का उपयोग करके इसे लागू करने के कोई ऑनलाइन उदाहरण हैं?
रेमंड सल्ट्रेली 13


आप अभी भी odata v3 ( odata.org/media/30002/OData.html#actions ) में कार्यों को जोड़ने के साथ इस राय का समर्थन करते हैं ?
क्रिस डामौर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.