REST API + वेबपेज उपयोग के लिए ASP.NET MVC बनाम WCF


14

मुझे लगता है कि प्रोग्रामेटिक सर्विस ओरिएंटेड यूसेज बनाम ह्यूमन इंटरैक्शन के लिए चर्चा स्पष्ट है।

लेकिन अगर मुझे एक ऐसा एप्लिकेशन बनाना था जो प्रोग्रामेबल एपीआई और वेबसाइट दोनों का उपयोग करता हो, जो एक ही एपीआई से जुड़े डेटा का उपयोग करता हो, तो क्या यह केवल ASP.NET का उपयोग करने की ओर झुकाव करता है?

ASP.NET और WCF को एक ही एप्लीकेशन पर काम करना कितना आसान है?

जवाबों:


11

जहाँ तक ASP.NET/MVC और WCF दोनों का लाभ उठाने वाले एक अनुप्रयोग को लिखना है, यह महान नहीं है। वेबएपीआई ने मामलों में सुधार किया हो सकता है, लेकिन एक परियोजना में मैं परिचित हूं जो एक ही ऐप में डब्ल्यूसीएफ और एमवीसी का उपयोग कर रहा था, उन्होंने समान अवधारणाओं का प्रतिनिधित्व करने के लिए मॉडल के दो अलग-अलग सेटों को बनाए रखा - एक डब्ल्यूसीएफ कोड के लिए और एक एमवीसी के लिए। कोड। आप कल्पना कर सकते हैं कि उन सभी मैपरों के लिए जो उन्हें दो मॉडलों के बीच चीजों का अनुवाद करने के लिए लिखना था - कोड की बहुत सारी पंक्तियाँ थीं जिन्हें टाला जा सकता था / जिनसे बचना चाहिए था।

ऐसा क्यों हुआ इसका एक हिस्सा यह है कि WCF अनुरोध और प्रतिक्रिया ऑब्जेक्ट को [DataContract] और [DataMember] के साथ उनकी संपत्तियों के साथ एनोटेट किया जाना चाहिए, जबकि MVC को इसकी आवश्यकता नहीं है। दूसरी ओर मुहावरेदार एमवीसी ViewModels चाहते हैं, जिसमें WCF DataContracts की तुलना में अलग-अलग लक्ष्य हैं। बेशक, यह संभव है कि डोमेन ऑब्जेक्ट्स के दो पूर्ण सेटों का उपयोग डब्ल्यूसीएफ और एमवीसी परस्पर विरोधी की तुलना में कॉनवे के कानून के साथ अधिक था , लेकिन यह इंगित करने योग्य है कि डब्ल्यूसीएफ और एमवीसी के आउटपुट और इनपुट के रूप में अलग-अलग लक्ष्य और आवश्यकताएं हैं।

निजी तौर पर, मैं एक साधारण लेकिन शक्तिशाली सेवाओं को विकसित करने के लिए आंशिक रूप से बैक-एंड एपीआई उन्मुख हूं, खासकर जब आप कई क्लाइंट्स चाहते हैं। मुझे लगता है कि उत्कृष्ट जावास्क्रिप्ट MVVM और माइक्रो-एमवीसी फ्रेमवर्क का आगमन इसे एक स्वाभाविक विकल्प बनाता है, क्योंकि BackboneJS , KnockoutJS और अन्य का उपयोग करके एप्लिकेशन कोड लिखना एक सक्षम विकास वातावरण की अनुमति देता है। फिर आप अपने वेब ऐप, या मोबाइल क्लाइंट पर बनाने के लिए अपनी पसंद के माइक्रो एमवीसी में बैक एंड का उपभोग कर सकते हैं, और आपके पार्टनर दूरस्थ रूप से समान एपीआई का उपभोग कर सकते हैं।

सुझाव

या तो WebAPI या सर्विस स्टैक आपके बैक एंड एपीआई के निर्माण के लिए अच्छे उम्मीदवार हो सकते हैं। मैं सेवा स्टैक की सलाह देता हूं, जैसा कि मैं पिछले कुछ महीनों से इसका उपयोग कर रहा हूं और पाया है कि यह डब्ल्यूसीएफ के लिए एक उत्कृष्ट प्रतिस्थापन है। मैं वर्तमान में अपने ब्लॉग पर सर्विस स्टैक पर एक ट्यूटोरियल श्रृंखला लिख ​​रहा हूं ।

सर्विस स्टैक का रखरखाव करने वाले समूह ने एक उदाहरण एप्लिकेशन को एक स्टैकऑवरफ्लो को क्लोन की तरह विकसित करने के लिए फ्रेमवर्क का उपयोग करके पोस्ट किया है जो एक विकास पैटर्न दिखाता है जो मुझे लगता है कि विशेष रूप से सम्मोहक है। इसमें एक सरल, मॉडल आधारित सेवाओं का अंत शामिल है जिसकी कल्पना आप एमवीसी वेबसाइट, एक मोबाइल ऐप या केवल कुछ भी आसानी से कर सकते हैं। ServiceStack के डिज़ाइन लक्ष्य स्पष्ट रूप से एक पैटर्न को प्रोत्साहित करते हैं जिससे क्लाइंट और सर्वर के बीच कम युग्मन पैदा हो। विचार यह है कि चैट एपीआई की कॉल से बचें, जैसे GetCustomersInRegionWithSearchTerm(int regionId, string searchTerm)कि कम तरीकों के पक्ष में। आप सेवा स्टैक में इसी तरह लागू कर सकते हैं:

[Route("/customers", "GET"]
[Route("/customers/search/{SearchTerm}", "GET"]
[Route("/customers/region/{Region}", "GET"]
[Route("/customers/region/{Region}/search/{SearchTerm}", "GET"]
public class Customers 
{
    public int? RegionId { get; set; }
    public string SearchTerm { get; set; }
}

public class CustomersService : Service
{
    public object Get(Customers request) {
        // handle request
        return new CustomersResponse();
    }
}

लाभ, मेरी आँखों को, कि बजाय बहुत सारे और अलग तरीकों की बहुत सारी के ऊपर अपने व्यापार तर्क प्रसार होने के है GetCustomersInRegionWithSearchTerm(int regionId, string searchTerm), GetCustomersInRegion(int regionId), GetCustomersWithSearchTerm(string searchTerm), GetCustomers(), यह सब एक ही स्थान पर है। इससे अधिक रखरखाव योग्य कोड होना चाहिए।

संयोग से, स्टैक एक्सचेंज ने मूल सेवा स्टैक लेखक को काम पर रखा था । वह सेवा ढेर परियोजना के लिए सक्रिय रूप से प्रतिबद्ध है

मैं विशेष रूप से कुछ चीजों के लिए संदेश कतारों का शौकीन हूं - और जबकि डब्ल्यूसीएफ इसके लिए अनुमति देता है, वेबएपीआई नहीं करता है। ServiceStack MQ के माध्यम से एक ही वेब सेवा को लागू करने की अनुमति देता है। इस बारे में अधिक जानकारी के लिए Redis MQ होस्ट देखें: github.com/ServiceStack/ServiceStack/wiki/Messaging-and-redis


ध्यान दें: ServiceStack एक ही वेब सेवा को MQ के माध्यम से लागू करने की अनुमति देता है, Redis MQ होस्ट को देखें: github.com/ServiceStack/ServiceStack/wiki/Messaging-and-redis
मिथक

बहुत बढ़िया धन्यवाद @mythz! मुझे नहीं पता था।
काइल हॉजसन

लेकिन ऐसा लगता है जैसे mvc4 वेब एपीआई मार्ग जा रहा है ... क्या यह 'आधिकारिक तौर पर प्रायोजित' रूपरेखा नहीं बनाता है?
Xster

पिछले दो वर्षों के लिए "आधिकारिक रूप से प्रायोजित ढांचे" (WCF पूर्व WebAPI) के साथ कुश्ती करने के बाद, यह अब मेरे चयन मानदंडों का हिस्सा नहीं है। यह कहना नहीं है कि WebAPI अच्छा है या बुरा, मैंने अभी तक इसकी कोशिश नहीं की है। मैंने किसी भी इच्छा को महसूस नहीं किया है, ServiceStack मेरे मुद्दों को हल कर रहा है।
काइल हॉजसन

3
यहाँ स्पष्ट बताते हुए, लेकिन WCF सेवाओं से ViewModels और प्रतिक्रिया ऑब्जेक्ट पूरी तरह से 2 अलग चीजें हैं। एक ViewModel केवल डेटा का एक सबसेट हो सकता है, या संयुक्त विभिन्न स्रोतों से डेटा के टुकड़े हो सकता है। ViewModels के लिए वस्तुओं का एक अलग सेट होने से MVC के लिए वास्तव में क्या आवश्यक है, जहां डेटा आता है (WCF या अन्यथा) इससे कोई फर्क नहीं पड़ता। इसके अलावा, X.Name = Y.Name बायलरप्लेट कोड को बचाने के लिए ऑब्जेक्ट प्रकारों के बीच मैपिंग के लिए ऑटोमैपर है।
उल्लू

4

@ टीबी ने इसका सही जवाब दिया है, लेकिन मैं उस जवाब को बढ़ाना चाहता था। ASP.NET वेब API जो वर्तमान में बीटा चरण में है और एक OSS प्रोजेक्ट निकटतम ढांचा है जिसे आप ढूंढ रहे हैं।

उत्पाद का संक्षिप्त विवरण इस प्रकार है ( ASP.NET वेब एपीआई पेज से उद्धृत ):

ASP.NET वेब एपीआई एक ढांचा है जो HTTP सेवाओं का निर्माण करना आसान बनाता है जो ब्राउज़रों और मोबाइल उपकरणों सहित क्लाइंट की एक विस्तृत श्रृंखला तक पहुंचते हैं। ASP.NET वेब एपीआई .NET फ्रेमवर्क पर Restful अनुप्रयोगों के निर्माण के लिए एक आदर्श मंच है।

क्लाइंट एप्लिकेशन के लिए जो आप अपने वेब एपीआई का उपभोग करने के लिए उपयोग कर रहे हैं, यह निश्चित रूप से एक ASP.NET अनुप्रयोग होना जरूरी नहीं है। आप जावास्क्रिप्ट का उपयोग करके एक स्थिर HTML पेज के साथ अपने एपीआई का उपभोग कर सकते हैं। आप इसे कुछ उपयोगी जावास्क्रिप्ट पुस्तकालयों जैसे jQuery के साथ आसानी से प्राप्त कर सकते हैं।

दूसरी ओर, आप निश्चित रूप से किसी भी ASP.NET अनुप्रयोग में सर्वर साइट पर अपने एपीआई का उपभोग कर सकते हैं। वेब एपीआई परियोजना ने HttpClient नामक एक नया HTTP .NET क्लाइंट एपीआई भी पेश किया है जो HTTP सेवाओं का उपभोग करना आसान बनाता है।

सामान्य तौर पर, आपके द्वारा आरंभ करने के लिए यहां संसाधनों का अच्छा समूह है:

ASP.NET वेब एपीआई के साथ शुरू करना - ट्यूटोरियल, वीडियो, नमूने

याद रखें कि परियोजना अभी भी अपने बीटा चरण में है। मैं आपको हेनरिक एफ नील्सन ब्लॉग का अनुसरण करने की सलाह देता हूं जहां वह परियोजना के लिए नवीनतम अप्रबंधित अपडेट के बारे में जानकारी पोस्ट करता है। आप ASP.NET वेब स्टैक प्रोजेक्ट के अंदर प्रोजेक्ट के सोर्स कोड और डेवलपमेंट फ्लो तक पहुंच सकते हैं ।


3

मुझे लगता है कि वर्तमान अपराध RVC के लिए WCF के बजाय MVC वेब एपीआई का उपयोग करना है। http://stephenwalther.com/blog/archive/2012/03/05/introduction-to-the-asp-net-web-api.aspx

विकास मॉडल बहुत करीब है और आप WCF के कभी-कभी खराब कॉन्फ़िगरेशन को बायपास करते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.