2012-09-05 24 views
19

में हाइपरमीडिया लिंक जेनरेट करना मुझे यह जानकर उत्सुकता है कि दूसरों ने अपने वेब एपीआई के लिए हाइपर्मियाडिया लिंक बनाने के मुद्दे के साथ कैसे निपटाया है? विशेष रूप से, मैं एएसपी.नेट वेब एपीआई का उपयोग कर रहा हूं, और ऑपरेशन रिटर्न हाइपर्मियाडिया से संबंधित प्रकारों के बीच फाड़ा हुआ हूं, या संसाधन को वापस लौटा रहा हूं, और बाद में पाइपलाइन में हाइपर्मियाडिया सामग्री होती है।वेब एपीआई

public Resource<Order> GetOrder(int id) { 
    return new Resource<Order>() { 
     Content = new Order(), 
     Links = new LinkCollection<Order>() { new AddOrderLink(), new UpdateOrderLink()} 
    } 

या अधिक

public Order GetOrder(int id) { return new Order(); } 

की तरह कुछ और फिर एक HttpOperationHandler या कस्टम फ़ॉर्मेटर या कुछ और अंदर हाइपरमीडिया लिंक जोड़ने: है यही कारण है, लोगों की तरह काम करने के लिए करते हैं?

यदि दृष्टिकोण # 2 की तरह है, तो आप कैसे जानते हैं कि कौन से लिंक उत्पन्न करना चाहते हैं? बस कुछ ऑर्डर ऑब्जेक्ट्स के लिए जेनरेट किए गए लिंक के कुछ मानक सेट हैं? OrdersController में विभिन्न संचालन सजाने के गुण?

+0

अनुपूरक: मैंने वेब एपीआई में हाइपरमीडिया के बारे में ग्लेन ब्लॉक की पोस्ट पर पढ़ा है (http://codebetter.com/glennblock/2012/01/08/hypermedia-and-web-api-design-brain-dump-and -समूह /) और जब वह लिंक इन-ऑपरेशन (उपर्युक्त उदाहरण 1 के समान) उत्पन्न करने के पक्ष में प्रतीत होता है, तो मुझे लगता है कि वह "मिडलवेयर" मार्ग जैसा अंत में उल्लेख करता है वह अधिक प्राकृतिक लगता है। – Jordan0Day

+1

टेमी न्यूजीलैंड पर एमी से प्रेजेंटेशन को देखें http://channel9.msdn.com/Events/TechEd/NewZealand/2013/DEV305 उसका समाधान वेब एपीआई के साथ हाइपर्मियाडिया के लिए वादा कर रहा है, यहां भी जिथब नमूना कोड – Gomes

उत्तर

24

मैं विकल्प दो पसंद करता हूं (पाइपलाइन में बाद में हाइपरमीडिया लिंक जोड़ना) और blogged about doing this yesterday

समाधान संदेश हैंडलर का उपयोग कर क्लाइंट में लौटने से पहले हाइपरमीडिया लिंक के साथ अपने संसाधनों को "समृद्ध" करना था।

+0

यह वास्तव में अच्छा है, साझा करने के लिए धन्यवाद। हमने विस्तार विधियों का उपयोग किया और यह कुकी कटर कोड का अधिक था जो क्रिया विधि में कोड की 1 पंक्ति के लिए जिम्मेदार था। मुझे पसंद है कि आपके पास संसाधन वापस लौटाया जा रहा है और संदर्भ के आधार पर हाइपरमीडिया जोड़ या जोड़ सकता है। – suing

9

आप मैं अपने अगले प्रोजेक्ट में इसका इस्तेमाल करने के रूप में यह अच्छी और यह करने के लिए आसान होने के लिए seens की योजना बना रहा हूँ से github

Hyprlinkr उपयोग कर सकते हैं और आप nuget पैकेज के माध्यम से इसे प्राप्त कर सकते हैं।

+3

देखें, इसलिए हाइप्रलिंक एक है वास्तव में लिंक उत्पन्न करने के लिए अच्छा समाधान - जब आप जानते हैं कि आप कौन से लिंक जेनरेट करना चाहते हैं। मेरा प्रश्न "मुझे कैसे उत्पन्न करना चाहिए" के बजाय, "मुझे कैसे उत्पन्न करना चाहिए" के बजाय, मुझे कैसे पता होना चाहिए? किसी भी तरह से, हाइपरलिंक एक बार "कैसे" भाग प्राप्त करने के बाद समस्या को हल करने में मदद करता है। – Jordan0Day

2

इस सवाल का जवाब देने में, यह के होते हुए भी, इस से निपटने के लिए ASP.NET MVC दृष्टिकोण की ओर देखने के लिए के बाद से ASP.NET MVC एक पाठ/html विवश वेब एपीआई के संस्करण के रूप में देखा जा सकता है (मैनुअल सामग्री बातचीत शिक्षाप्रद है), और चूंकि यह स्पष्ट रूप से वेब एपीआई के डिजाइन को प्रभावित करता है।

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

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

यह राज्य-विशिष्ट स्वरूपण कोड अन्य सबफॉर्मेटर्स को भी प्रतिनिधि दे सकता है, वैसे ही रेजर विचार आंशिक विचारों की संरचना का समर्थन करता है।

1

मैं अपने समाधान here

यह वर्ग का उपयोग करता है और संपत्ति अपने इकाई में एक ResourceLink वस्तु भरने के लिए एक ApiController विस्तार विधि के साथ संयोजन में विशेषताओं जोड़ दिया है। यह किसी संग्रह संग्रह के लिए लिंक भी पॉप्युलेट कर सकता है। यह पूरा लेख नहीं है लेकिन यह काफी सहज है और अच्छी शुरुआत करेगा।

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