2009-09-09 17 views
8

के साथ हेटोएस प्राप्त करने का प्रयास कर रहा हूं मैं एक एंटरप्राइज़ सिस्टम पर काम कर रहा हूं जो मोबाइल क्लाइंट और केंद्रीय सर्वर के बीच एक विश्वसनीय वेब सेवा का उपयोग करेगा। यथासंभव यथार्थवादी, मान लें।रीस्टफुल वेब सेवाएं: कस्टम एक्सएमएल

मेरा प्रश्न हैटओएएस (आवेदन राज्य के इंजन के रूप में हाइपर्मियाडिया) से संबंधित है, और HTTP प्रतिक्रिया निकायों में कस्टम एक्सएमएल का उपयोग करता है।

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

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

उदा। जब कोई क्लाइंट प्रोसेसिंग के लिए सर्वर पर एक लेनदेन पोस्ट करता है, तो सर्वर में 201 HTTP प्रतिक्रिया निकाय (बड़े xml दस्तावेज़ के हिस्से के रूप में) में निम्न xml खंड शामिल हो सकता है। सर्वर नए बनाए गए लेनदेन संसाधन के लिए यूआरआई के ग्राहक को भी सूचित करेगा, लेकिन शायद यह केवल स्थान HTTP शीर्षलेख में ही शामिल होगा।

<resulturi>http://resultserver/results/1234.xml</resulturi> 

इस तो बुरा है? बहुत कम संभावना है कि इस सेवा का उपयोग करने वाले ग्राहक कभी ब्राउज़र आधारित होंगे। यूपीएल के भीतर सादा पाठ के रूप में मूत्र देने पर हाइपर्मियाडिया के अन्य फायदे क्या हैं?

मुझे लगता है कि मैं एक्सएचटीएमएल पर जा सकता हूं, लेकिन हमारे मोबाइल प्लेटफ़ॉर्म पर पार्सर POX के साथ अधिक कुशल है।

+1

> मुझे पता है कि यह हेटाओस के एच भाग को तोड़ता है। क्या यह है? मैं इस बात से अनजान था कि हेटोआस आपके द्वारा उपयोग की जाने वाली सामग्री-प्रकारों पर बाधा डालता है। – trendels

उत्तर

9

परिणामस्वरूप यूआरएल लौटने से आप क्या कर रहे हैं प्रभावी रूप से प्रभावी रूप से हाइपर्मियाडिया है। एकमात्र समस्या यह है कि आपको मीडिया-प्रकार की आवश्यकता होती है जो क्लाइंट को बताती है कि प्रतिक्रिया कैसे स्वरूपित की जाती है ताकि यह एक अनुमानित और दस्तावेज तरीके से यूआरएल को पार्स कर सके।

विकल्प 1: अपना खुद का मीडिया प्रकार बनाएं जैसे vnd.yourcompany.Resource + xml। ऐसा करके आप यह कह रहे हैं कि मीडिया प्रकार को एक्सएमएल पार्सर द्वारा पार्स किया जा सकता है, लेकिन यह आपकी कंपनी द्वारा परिभाषित कुछ विशेष नियमों का पालन करता है। इस बिंदु पर आप हाइपरमीडिया लिंक को परिभाषित करने के लिए जो भी मानक चाहते हैं उसका उपयोग कर सकते हैं (this प्रश्न देखें)। इसका एक अच्छा फायदा यह है कि यदि 6 महीने में आप तय करते हैं कि आपको अपने एक्सएमएल के प्रारूप में ब्रेकिंग बदलाव करने की ज़रूरत है तो आप एक vnd.yourcompany.ResourceV2 + xml बना सकते हैं और जब तक आप स्वीकार करने के लिए पर्याप्त स्मार्ट थे- अपने पुराने ग्राहकों पर हेडर, आप नए क्लाइंट एप्लिकेशन को नए प्रारूप को स्वीकार करके पुराने प्रारूप के साथ नए फॉर्मेट को आसानी से पेश कर सकते हैं।

विकल्प 2: मैं इस विकल्प के बारे में केवल आधा गंभीर हूं, लेकिन मैंने एप्लिकेशन/हाइपरक्सएमएल + एक्सएमएल नामक एक नए मेडियाटाइप के लिए दबाव डालने पर विचार किया है। दस्तावेज़ एप्लिकेशन/एक्सएमएल के समान नियमों का पालन करेगा लेकिन हाइपर्मियाडिया के लिए XLink का भी उपयोग करेगा। यह उन लोगों को अनुमति देगा जो XML दस्तावेज़ का विश्लेषण करने के लिए जावास्क्रिप्ट का उपयोग कर रहे हैं ताकि मानक तरीके से हाइपर्मियाडिया का लाभ भी उठाया जा सके।

विकल्प 3: एक्सएचटीएमएल का उपयोग करें। मुझे समझ में नहीं आता कि आपके पार्सर को एक्सएचटीएमएल के साथ समस्या क्यों है, लेकिन मैं इसके लिए अपना शब्द ले जाऊंगा।

2

अंतर्निहित मार्कअप भाषा के बावजूद, आपके रीस्टफुल सर्वर को अनुरोधों को संसाधित करने की आवश्यकता के दो महत्वपूर्ण टुकड़े हैं: मीडिया प्रकार और यूआरआई। किसी दिए गए यूआरआई के लिए मीडिया प्रकार मानना ​​क्लाइंट-सर्वर युग्मन पेश करेगा। उदाहरण के लिए, एक ही यूआरआई को दो अलग-अलग प्रकार के मीडिया प्रकार की सेवा करने से रोकें।

एक्सएमएल हाइपरमीडिया प्रारूपों को डिजाइन करते समय एकमात्र विकल्प नहीं है। Sun Cloud API देखें, जो JSON पर आधारित hypertext-driven REST API को परिभाषित करता है (हालांकि ऐसा लगता है कि मीडिया प्रकार का उपयोग हाइपरलिंक के साथ नहीं होता है)। इस दृष्टिकोण से ऐसे में जाना मुश्किल नहीं है जो मीडिया प्रकारों को हाइपरलिंक्स से जोड़ता है।

उदाहरण के लिए, आप एक जेएसओएन डेटा संरचना को परिभाषित कर सकते हैं जिसे लिंक कहा जाता है;

{ 
    "name":"human-readable label for link", 
    "uri":"http://example.com/resources/123", 
    "media_type":"application/vnd.com.example.Resource+json" 
} 
2

हाइपरमीडिया को उस मामले के लिए एचटीएमएल या यहां तक ​​कि पूरी तरह से योग्य यूआरआई की आवश्यकता नहीं है। यदि आपका मीडिया प्रकार प्रतिक्रिया के कुछ तत्वों को डी-रेफरेंस योग्य संसाधनों में बदलने के लिए नियम परिभाषित करता है तो आपके पास हाइपर्मियाडिया है।

<result>1234</result> 

ऊपर के उदाहरण, पर कैसे परिणाम तत्व की सामग्री भिन्नता के लिए उसी तरह से हाइपरमीडिया है कि एक मीडिया प्रकार शासन के साथ संयुक्त:

<result>/foo/1234</result> 

एक नियम के आधार पहले जोड़ें करने के साथ है http यूआरआई तो नीचे दिया गया उदाहरण है जहां तथ्य यह है कि http स्ट्रिंग dereferencable है निहित छोड़ दिया जा सकता है।

<result>http://myserver.com/foo/1234</result> 

हालांकि, जबकि वे सब हाइपरमीडिया कर रहे हैं और कि बाधा मिलते हैं, मैं अपने खुद के नए हाइपरमीडिया उत्पादन नियम और टैग बनाने यदि संभव हो और बस फिर से उपयोग मौजूदा खिलाफ बहस होगी। पहला उदाहरण उपयोगकर्ता को यह कम स्पष्ट करता है कि यह तत्व अंतिम उदाहरण की तुलना में एक हाइपरलिंक्ड संसाधन का प्रतिनिधित्व करता है।

+0

पहले दो उदाहरणों के लिए क्लाइंट के लिए बैंड की जानकारी की आवश्यकता है ... और इसलिए वे रीस्टफुल नहीं हैं। – HDave

+0

इस प्रकार एंकर टैग एचटीएमएल - ए एचआरईएफ में काम करता है। मीडिया विशिष्ट प्रसंस्करण नियम सापेक्ष यूआरएल के लिए अनुमति देते हैं। –

0

मैं सुझाव दूंगा कि इन हाइपरलिंक्स के हाथ कोड के बजाय, एक उपकरण का उपयोग करें जो आपके लिए उन हाइपरलिंक बनाता है। इंटरैक्शन उन्मुख प्रोग्रामिंग इन इंटरैक्शन (हाइपरलिंक्स) बनाने के लिए एक अच्छी विधि है।

<resulturi xlink:href="http://resultserver/results/1234.xml"/> 

एक्सएमएल: इस लिंक इस तकनीक के लिए हमें http://www.masterkube.com/hateoas_technology.html

+0

हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन यहां उत्तर के आवश्यक हिस्सों को शामिल करना बेहतर है और संदर्भ के लिए लिंक प्रदान करना बेहतर है।लिंक किए गए पृष्ठ में परिवर्तन होने पर लिंक-केवल उत्तर अमान्य हो सकते हैं। – PKirby

0

काम एक बहुत ही कम से कम (भले ही आप कुछ नहीं करते हैं) पर का पालन करें, आप तत्व सामग्री के बजाय एक XLink विशेषता में अपने URL रखना चाहिए प्रोसेसर पार्स करने और इन्हें यूआरआई के रूप में मूल रूप से पालन करने में सक्षम हैं। एक सामान्य नियम के रूप में, पाठ जो अनुवाद योग्य नहीं है या कभी भी उप-तत्व नहीं हो सकता है, ऐसे प्रतिबंधों को लागू करने के लिए एक विशेषता में होना चाहिए।

लेकिन इसके अलावा, दूसरों ने जो सुझाव दिया है और अपने मीडिया प्रकार को परिभाषित करें ताकि इसका अर्थ ग्राहकों द्वारा समझा जा सके।