2015-10-07 7 views
5

मेरे पास यह प्रश्न है जो थोड़ी देर के लिए मेरे सिर के माध्यम से घूम रहा है। आइए मान लीजिए कि हमने अलग-अलग परतों पर बैकएंड और फ्रंटएंड के साथ हमारी परियोजना को संरचित किया है। तो, दृश्यपटल से, हम एक costumer है, जो hal+json प्रारूप पर आता है प्राप्त करना चाहते हैं:हेतेओस को फ्रंटेंड से कैसे संभाला जाना चाहिए?

GET /customers/1 HTTP/1.1 
Accept: application/hal+json 
{ 
    "name": "Alice", 
    "links": [ { 
     "rel": "self", 
     "href": "http://localhost:8080/customer/1" 
    } { 
     "rel": "transactions", 
     "href": "http://localhost:8080/customer/1/transactions" 
    }] 
} 

फिर, दृश्यपटल से मैं सभी ग्राहक लेनदेन करना चाहते हैं। मेरा सवाल है: मुझे यूआरएल कैसे प्राप्त करना चाहिए? क्या यह प्रतिक्रिया से होना चाहिए? या मैं इसे आंतरिक रूप से बनाना चाहिए?

अगर हम पहले विकल्प के साथ जाते हैं, तो मुझे लगता है कि शायद यह तब तक सभी लिंक को फिर से शुरू करने के लिए सुरुचिपूर्ण नहीं होगा जब तक कि हम उसे प्राप्त न करें। साथ ही, ऐसी स्थिति हो सकती है जहां हमारे पास उस अनुरोध का लिंक न हो जो हम करना चाहते हैं।

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

मैंने सोचा कि शायद सेवा को application/hal+json (उपयोगकर्ताओं के लिए उन्मुख) और application/json (ग्राहकों के लिए उन्मुख) का समर्थन करना चाहिए, लेकिन मुझे नहीं लगता कि यह आम तौर पर इसे कैसे किया जा रहा है।

आपको क्या लगता है?

उत्तर

3

निश्चित रूप से पहला विकल्प।

हाइपरमीडिया नियंत्रण की बात यह है कि वे हमें बताते हैं कि हम क्या आगे क्या कर सकते हैं: अर्थात्, के बाद से HATEOAS Richardson Maturity Model के अंतिम चरण में है, ग्राहकों को प्रदान की गई लिंक का पालन करने, नहीं खुद से यूआरएल का निर्माण करने की उम्मीद कर रहे हैं , और संसाधन के यूआरआई को करने के लिए हमें कुशलतापूर्वक उपयोग करने की आवश्यकता है। हमें यह जानने के बजाय कि हमारे नियुक्ति अनुरोध को कहां पोस्ट करना है, प्रतिक्रिया में हाइपरमीडिया नियंत्रण हमें बताता है कि इसे कैसे करें।

इससे क्या लाभ आते हैं? मैं कम से कम दो के बारे में सोच सकते हैं:

  • REST API का सरल उन्नयन - सर्वर साइड डेवलपर्स संसाधनों का यूआरआई को बदल सकते हैं, क्लाइंट-साइड कोड को तोड़ने क्योंकि ग्राहकों को सिर्फ दिए गए लिंक का पालन के बिना; इसके अतिरिक्त, सर्वर-साइड डेवलपर्स आसानी से नए लिंक जोड़ सकते हैं
  • मजबूती - लिंक का पालन करके, क्लाइंट-साइड कोड टूटी हुई लिंक, गलत वर्तनी वाले लिंक आदि तक पहुंचने का प्रयास नहीं करेगा।

प्रश्न: इसके अलावा, वहाँ स्थिति है जहाँ हम अनुरोध हम क्या करना चाहते हैं का लिंक नहीं है हो सकता है?

यह सुनिश्चित करने के लिए एपीआई डिजाइनर पर निर्भर है कि सभी आवश्यक लिंक प्रदान किए जाएं। फ्रंट एंड डेवलपर को इसके बारे में चिंता नहीं करनी चाहिए।

यह भी देखें:

+0

क्या मामले में मैं प्रयोक्ता आईडी जो मैं एक अधिकार जोड़ना चाहते है? तो मुझे निर्दिष्ट उपयोगकर्ता के अधिकारियों का लिंक प्राप्त करने के लिए/उपयोगकर्ताओं को एक GET अनुरोध करना होगा। यह ठीक रहेगा? मैं एक के बजाय 2 अनुरोध कर रहा हूँ। आपके प्रतिक्रिया के लिए धन्येवाद! – jscherman

+2

आपके पास बाहरी सिस्टम से कोई आईडी नहीं होनी चाहिए। आपके पास एक यूआरएल होना चाहिए और हाँ, यह 2 अनुरोध है ... जब तक कि सर्वर आपके इरादे को जानने के लिए पर्याप्त स्मार्ट न हो। तो उदाहरण के लिए यह आपके लिए लेनदेन संबंध एम्बेड कर सकता है। एक तरीका यह है कि आप इसे मंशा देकर उपभोक्ता के साथ हेडर के साथ पहचान कर सकते हैं। लेकिन 2 अनुरोधों के बारे में बहुत ज्यादा परेशान मत हो, यह भुगतान करने के लिए एक बहुत ही कम कीमत है। अब यदि आप आंतरिक हैं ... आप किसी भी HTTP एपीआई का उपयोग क्यों कर रहे हैं? बस डीबी/सिस्टम या रिकॉर्ड पर जाएं और आपको आवश्यक डेटा प्राप्त करें। –

+0

मुझे लगता है कि मुझे आपका अंक मिला है। धन्यवाद! – jscherman

1

हैटओएएस (अनुप्रयोग राज्य के इंजन के रूप में हाइपरमीडिया) आरईएसटी अनुप्रयोग वास्तुकला की एक बाधा है। यह स्प्रिंग और AngularJS का उपयोग कर के बारे में एक और कड़ी यहाँ उपलब्ध है

https://spring.io/understanding/HATEOAS

:: आप उदाहरण के लिए स्प्रिंग HATEOAS प्रलेखन पर देख सकते हैं

AngularJS and Spring HATEOAS tutorial

यह एक काफी अच्छा प्रतीत हो रहा है और आपके उपयोग के मामले को संभालती है।

सादर, आन्द्रे

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

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