2013-04-21 13 views
29

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

बैकएंड पक्ष पर, मैं एक HATEOAS JSON API बनाने के लिए स्प्रिंग डेटा/आरईएसटी का उपयोग कर रहा हूं। हालांकि, यह खपत एक और कहानी है।

  • कंपनी {name, address}
  • कर्मचारी {firstName, lastName, employer[Company]}
  • गतिविधि {rate, day, employee[Employee], client[Company]}

और एक गतिविधि का अनुरोध (सबसे अधिक जटिल की इकाई:

उदाहरण के लिए, मैं उन 3 संस्थाओं मिल गया है मॉडल) इस तरह कुछ उत्पन्न करता है:

{ 
    links: [], 
    content: [{ 
      rate: 456, 
      day: 1366754400000, 
      links: [{ 
       rel: "self", 
       href: "http://localhost:8080/api/activities/1" 
      }, 
      { 
       rel: "activities.activity.client", 
       href: "http://localhost:8080/api/activities/1/client" 
      }, 
      { 
       rel: "activities.activity.employee", 
       href: "http://localhost:8080/api/activities/1/employee" 
      }] 
     }] 
} 

मेरी एपीआई आरईएसटी (लिंक द्वारा पहचाने गए संसाधनों) के संदर्भ में वार्ता करता है। उदाहरण के लिए एक गतिविधि में एक कर्मचारी है। मैं वास्तव में उपयोग करना चाहता हूं: {rate: 456, day: 1366754400000, employee: {firstName:"xxx", lastName:"xxx" ...}}

हालांकि, जैसा कि आप पहले आउटपुट में देख सकते हैं, मेरी गतिविधि में केवल लिंक कर्मचारी है, न कि उसका डेटा। क्या उन लिंक को हल करने और परिणामी डेटा को एम्बेड करने के लिए कोणीय में या किसी तृतीय-पक्ष लाइब्रेरी में कुछ भी है?

इस पर कोई इनपुट?

अग्रिम धन्यवाद!

+0

'अंगुलर में छिपी हुई कोई भी विशेषता' ... आपने क्या विशेषताओं की कोशिश की है जो आप चाहते हैं जो करने में सक्षम नहीं थे? अपने डेटा को पेश करने के लिए कोणीय के भीतर कई तरीके हैं। यह वास्तव में स्पष्ट नहीं है कि आपकी समस्या क्या है। आपकी अंतिम वाक्य को समझना बहुत मुश्किल है। कृपया अधिक जानकारी में बताएं – charlietfl

+0

हाय, मैंने अंतिम वाक्य संपादित किया, मुझे उम्मीद है कि यह स्पष्ट है। मेरा मूल रूप से क्या मतलब है: क्लाइंट साइड पर, मैं लिंक के साथ काम नहीं करना चाहता लेकिन सीधे डेटा के साथ काम करना चाहता हूं। – Rolf

+0

एक ऐसी सेवा बनाएं जो लिंक सेट करेगी, यह आसान है। आप जानते हैं कि सेवा कैसे बनाएं? तो आप एक लिंक के लिए एक जेसन फ़ाइल के माध्यम से कैसे खोज करें और लिंक के अनुसार कुछ अनुरोध करें। यह एक सेवा से एक विन्यास फाइल लोड करने की तरह है। कॉन्फ़िगरेशन उपलब्ध होने के बाद, बस सेवा को ठीक से सेट करें। – mpm

उत्तर

20

चेकआउट angular-hateoas। HATOAS- सक्षम REST API के साथ $ संसाधन का उपयोग करने के लिए एक AngularJS मॉड्यूल आईटी करता है।

+1

कूल, यह रीस्टैंगुलर (एपीआई-वार) के समान दिखता है। – Rolf

+1

और यह वास्तव में निम्नलिखित लिंक की धारणा को एम्बेड करता है, अस्थिरता के विपरीत, जो बहुत अच्छा है! – Rolf

+0

यह कोणीय 4 के साथ भी काम करता है? – Shilan

7

आप एक प्रतिक्रिया परिवर्तन लिख सकते हैं जो आपके लौटे ऑब्जेक्ट का निरीक्षण करेगा, लिंक की जांच करेगा, और प्रतिक्रिया वापस करने से पहले उन्हें हल करेगा। $http service documentation में "ट्रांसफॉर्मिंग अनुरोध और प्रतिक्रियाएं" अनुभाग देखें।

कुछ इस तरह:

transformResponse: function(rawData) { 
    var json = JSON.parse(rawData); 
    forEach(json.content.links, function(link) { 
    // resolve link... 
    }); 
    return json; 
} 

"संकल्प" लिंक कदम ही है एक $ http कॉल, उप संदर्भ भी हल किया जा जाएगा के बाद से। हालांकि, चूंकि ये असीमित हैं, इसलिए आप वास्तविक मूल्य के बजाय एक वादा वापस कर देंगे; मुझे नहीं पता कि ट्रांसफॉर्म फ़ंक्शन को ऐसा करने की अनुमति है या नहीं।

जैसा कि @charlietfl ने बताया, कृपया ध्यान दें कि इसके परिणामस्वरूप एक ही इकाई को वापस करने के लिए कई HTTP कॉल होंगे। भले ही मुझे हेटोआस की अवधारणा पसंद है, लेकिन अगर बहुत अधिक कॉल किए जाते हैं तो इससे आलसीपन हो सकती है। मैं सुझाव दूंगा कि आपका सर्वर डेटा लौटाएगा, या इसमें से कुछ सीधे, विवरण के लिए लिंक प्लस करें।

+0

धन्यवाद, मैं सावधानीपूर्वक कोशिश करूँगा और इसे पढ़ूंगा। – Rolf

2

क्लाइंट पर लिंक के मुकाबले डेटा के साथ काम करने के बारे में आपकी टिप्पणी के आधार पर, मुझे लगता है कि Restangular एक अच्छा फिट होगा।

+0

बढ़िया, मेरे पास एक नज़र आएगा :) – Rolf

+0

2014 में अब तक मैं यह भी सोच रहा हूं कि एंजुलरजेएस पारिस्थितिक क्षेत्र में हेटोएस-स्टाइल खपत के लिए सबसे अच्छा फिट क्या होगा। तो यह कैसे समाप्त हुआ, @Rolf? – Yosh

+0

ठीक है, मैंने इस मुद्दे पर पर्याप्त जांच नहीं की थी। Restangular HTTP पर एक एपीआई उपभोग करने की अनुमति देता है (यह रीस्टफुल हो सकता है या नहीं) बहुत आसानी से। हालांकि कोई स्वचालित खोज (HATEOAS पर आधारित)। – Rolf

1

मैं अपनी परियोजनाओं में से एक के लिए angular-hal का उपयोग कर रहा हूं। यह एक वसंत हैटोस बैकएंड था। और मैं किसी भी मुद्दे में नहीं चला था। यह parametrized संसाधनों को संभालती है। मुझे संदेह है कि यह केवल एचएएल का समर्थन करता है, क्योंकि आप स्प्रिंग डेटा रेस्ट का उपयोग कर रहे हैं, इसलिए आपको शायद एचएएल अनुपालन प्रतिक्रिया उत्पन्न करने के लिए इसे कॉन्फ़िगर करना होगा।

+1

[संस्करण 2.2.0 से वसंत डेटा आराम प्रतिक्रिया डिफ़ॉल्ट रूप से एचएएल हैं] (http://docs.spring.io/spring-data/rest/docs/2.2.0.RELEASE/reference/html/#repository-resources। संसाधन खोजे जाने) – mounds

0

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