2013-10-21 10 views
11

आगामी परियोजना में हम अपनी वेबसाइट्स और ब्राउज़र क्लाइंट दोनों को सेवा कार्यक्षमता का पर्दाफाश करने के लिए एएसपी.NET वेबएपीआई 2 का उपयोग करना चाहते हैं।किसी वेबएपीआई प्रोजेक्ट के लिए सी # HTTP क्लाइंट रैपर उत्पन्न करने का कोई तरीका?

चूंकि हम संभवतः जितना संभव हो उतने "अंत-बिंदु" चाहते हैं, हम सभी कॉल चाहते हैं, यहां तक ​​कि "आंतरिक" वेबपैआई वेब सेवाओं से हमारे सर्वर का उपभोग करने के लिए भी। (यानी सीधे नियंत्रक उदाहरण को नया नहीं जोड़ना)

मैं HTTP क्लाइंट को लपेटने और दृढ़ता से टाइप किए गए "प्रॉक्सी" को वितरित करने वाले सी # "क्लाइंट के" उत्पन्न या मचान करने में मदद करने के लिए कुछ ढूंढ रहा हूं। "नई सेवा संदर्भ जोड़ें" के माध्यम से प्रॉक्सी उत्पन्न करते समय डब्ल्यूसीएफ की तरह।

मैंने समान प्रश्न पूछने वाले अन्य प्रश्न पढ़े हैं (जैसा कि HERE देखा गया है), लेकिन एमवीसी या परीक्षण चिंताओं से संबंधित एक और सीधा सवाल पूछना नहीं चाहता था।

+0

यह मैं के लिए क्या देख रहा था का सबसे अच्छा प्रतिनिधित्व है:

यहाँ एक नज़र http://www.faniereynders.com/2013/03/aspnet-web-api .html आशा है कि यह बाद में आधिकारिक तरीके से बाहर आ सकता है ... – BoxOfNotGoodery

उत्तर

9

इस का सबसे अच्छा प्रतिनिधित्व है क्या मैं खोज रहा था:

+०१२३५१६४१०६१:

http://reynders.co/2013/03/10/creating-a-proxy-for-aspnet-web-api-t4 http://reynders.co/2014/01/16/introducing-webapiproxy-providing

वह GitHub पर अपने उदाहरण कोड डाल

https://github.com/faniereynders/WebAPIProxy

आशा है कि यह बाद में आधिकारिक तरीके से बाहर आ सकता है।

1

वेब एपीआई कार्यक्षमता का उपयोग करने में आसान पहुंचने के लिए मैंने देखा है कि सबसे आम तरीका एक असेंबली है जो मुख्य कक्षाओं के साथ-साथ कुछ पोस्ट कार्यक्षमता को परिभाषित करता है। यह असेंबली डेटा स्थानांतरित करने के लिए JSON का उपयोग करती है।

पेपैल की एकीकृत एपीआई कैसे काम करता है इस पर एक नज़र डालें। अनिवार्य रूप से वे आपको एक असेंबली देते हैं जिसमें उपयोग में विभिन्न वर्गों की परिभाषाएं होती हैं। डेटा को सर्वर में स्थानांतरित करने के लिए एक कक्षा है।

विचार यह है कि ग्राहकों को परवाह नहीं है कि वे वास्तव में आपके साथ कैसे संवाद कर रहे हैं (यह सब ब्लैक बॉक्स में है) हालांकि उनके पास पूर्वनिर्धारित कक्षाओं का उपयोग करने या स्वयं को रोल करने का विकल्प है।

+0

मेरा मानना ​​है कि मुख्य चिंताएं विभिन्न सेवाओं और संबंधित विधियों के सापेक्ष मूत्रों के बीच मैपिंग है ताकि यूरी को स्वीकार करने के तरीकों के सामान्य सेट के बजाय आपको विधियों का एक बड़ा सेट मिल गया है जब एक विधि एक एपीआई कॉल से मेल खाती है। सवाल यह नहीं है कि यह संभव है, जाहिर है, ऐसा लगता है कि इस तरह के रैपिंग एपीआई को आसानी से हैंडकोड किया जा सकता है लेकिन मौजूदा दृष्टिकोण का उपयोग करके इसे स्वचालित रूप से कैसे उत्पन्न किया जा सकता है। –

1

मैं कहूंगा कि आपको डेटा तक पहुंचने के लिए वास्तव में पूर्ण उड़ा पुस्तकालय की आवश्यकता नहीं है; अगर आप अपने डेटा वस्तुओं एक आम पुस्तकालय में परिभाषित किया गया है, तो आप सामान्य सहायक तरीकों का उपयोग कर सकते हैं की तरह

public static TItem GetItem<TItem>(this HttpClient httpClient, string queryString) where TItem : class 
    { 
     var response = httpClient.GetAsync(queryString).Result; 
     if (response.IsSuccessStatusCode) 
     { 
      return response.Content.ReadAsAsync<TItem>().Result; 
     } 

     throw new HttpRequestException(response.ToString()); 
    } 

कुछ करने के लिए, लेकिन अपने स्वयं के त्रुटि से निपटने के लिए बदलने के लिए, आदि

3

मैं वर्तमान में .NET के लिए ओपन-सोर्स स्वैगर टूलचेन पर काम कर रहा हूं। इन उपकरणों के साथ आप मौजूदा डीएलएल से एक वेब एपीआई नियंत्रक का चयन कर सकते हैं और सी # और टाइपस्क्रिप्ट के लिए एक स्वैगर विनिर्देश या क्लाइंट कोड उत्पन्न कर सकते हैं। विजुअल स्टूडियो में टी 4 टेम्पलेट का उपयोग करना पीढ़ी की प्रक्रिया डब्ल्यूसीएफ सेवा संदर्भों की तरह काम करती है। http://NSwag.org

enter image description here

+0

यह दिलचस्प लग रहा है। वीबी समर्थन जोड़ने में कितना मुश्किल होगा? – InteXX

+0

यह सुविधा योजनाबद्ध नहीं है, लेकिन सी # से vb.net –

+0

में कनवर्ट करने के लिए टूल हैं, अब मुझे लगता है कि रोज़लिन के आगमन के साथ, ऐसा कदम भी स्वचालित हो सकता है। ऐसा लगता है कि आपने यहां एक अच्छी उपयोगिता बनाई है - अच्छा काम जारी रखें। – InteXX

संबंधित मुद्दे