2012-03-09 13 views
10

के लिए क्लाइंट लिखना मैं कुछ दिनों के लिए 'असली' रीस्टफुल एपीआई पर पढ़ रहा हूं, और मैं सोचता हूं मैं इसके बारे में क्या सोच रहा हूं।एक विश्वसनीय (हाइपर्मियाडिया) एपीआई

लेकिन चीजें हैं जो मैं पर ठोकर से एक है कि मैं कल्पना भी करने के लिए कैसे एक एक 'असली' हाइपरमीडिया एपीआई के लिए एक ग्राहक लिखते थे शुरू नहीं कर सकते:

  1. उदाहरण मैं के अधिकांश ब्राउज़र और मकड़ियों के बारे में बात पढ़ी है, लेकिन यह विशेष रूप से सहायक नहीं है: एक मानव निर्देशित और 'बुद्धिमान' है, दूसरा गूंगा और 'यादृच्छिक' है। जैसा कि यह खड़ा है, मुझे इस तरह की इंप्रेशन मिलती है कि क्लाइंट को काम करने के लिए आपको एआई सीखना होगा।

  2. एक बात है कि मेरे पास स्पष्ट नहीं है कि कैसे ग्राहक किसी भी लिंक पर उपयोग करने के लिए जो क्रिया जानता है? क्या यह यूरी के 'रिलायंस' प्रकार में अंतर्निहित है? वैकल्पिक (here पढ़ना) xhtml का उपयोग कर रहा है और एक क्लाइंट है जो फ़ॉर्म को पार्स और पोस्ट कर सकता है।

  3. लिंक कितना संभव होगा कि लिंक बदल जाएगा, लेकिन लिंक का मार्ग नहीं है? सबसे उदाहरणों में आप चारों ओर देखते हैं, मार्ग और लिंक एक ही कर रहे हैं:

जैसे। अगर मैं एक ग्राहक स्थापित करना चाहते हैं जो मुझे वापस टोनी के केक की दुकान से केक की सूची लाएगा:

http://tonis.com 
{ link: { type : "cakes" ; uri : "http://tonis.com/cakes" } } 

जब टोनी के टोनी के खाद्य दुकान बन जाता है, और लिंक http://tonis.com/desserts/cakes हो जाता है तो क्या होगा?

हम जड़ में प्रारंभिक cakes लिंक, रिवर्स संगतता के लिए रखना है? और यदि नहीं, तो हम गरीब छोटे एजेंट के लिए 'रीडायरेक्ट' कैसे करते हैं जिन्हें बताया गया है कि "रूट पर जाएं, केक देखें"?

मुझे क्या याद आ रही है?

+0

[ आगे] (http://wekeroad.com/2012/03/03/moving-the-philosophy-into-machinery/) [पढ़ना] (http://groups.google.com/group/servicestack/browse_thread/thread/ 0fc85c0290b499f2? Pli = 1) [के लिए] (http://timelessrepo.com/haters-gonna-hateoas) [कोई भी] (http://restfulie.caelum.com.br/) [रुचि] (http://oredev.org/2010/sessions/hypermedia-apis)। – Benjol

उत्तर

7

@Benjol

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

मैं अपने उदाहरण इस तरह से बदल देंगे:

  • लिंक संरचना ही
  • लिंक रिश्ते (: अगर वहाँ एक ग्राहक जो आपकी सेवा की खपत है

    {"link": { 
        "rel": "collection http://relations.your-service.com/cakes", 
        "href": "http://tonis.com/cakes", 
        "title": "List of cakes", 
        "type": "application/vnd.yourformat+json" 
    }} 
    

    , यह समझने की जरूरत इस मामले "संग्रह" जो आरएफसी और है में "http://relations.your-service.com/cakes" अपने डोमेन विशिष्ट लिंक संबंध)

  • है जो 10

इस मामले में ग्राहक केवल "href" विशेषता और केक की प्रदर्शन सूची द्वारा निर्दिष्ट पते को अव्यवस्थित कर सकता है। बाद में, यदि आप केक सूची प्रदाता यूआरआई क्लाइंट को काम करना जारी रखेंगे, तो इसका तात्पर्य है कि ग्राहक अभी भी आपके मीडिया प्रकार के अर्थशास्त्र को समझता है।

पीएस

  • वेब लिंक करना आरएफसी:

  • 8

    ठीक है, मैं एक बाकी विशेषज्ञ या तो नहीं कर रहा हूँ, मैं हाल ही में बहुत संबंधित सामान पढ़ने किया गया है, तो क्या मैं लिखने जा रहा हूँ नहीं मेरे अनुभव या राय बल्कि मैं क्या पढ़ा का एक सारांश है, विशेष रूप से, REST In Practice पुस्तक।

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

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

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

    तो, सेवा के साथ बातचीत करने के लिए, क्लाइंट एक हाइपरमीडिया प्रारूप का उपयोग करता है जो वे दोनों समझते हैं, जो मानक, गृहनिर्मित या मिश्रण (उदा। एक्सएमएल/एक्सएचटीएमएल-आधारित) हो सकता है। इसके अलावा, उन्हें प्रोटोकॉल को भी साझा करना होगा, जो कि संभवतः HTTP से अधिक है, लेकिन चूंकि कुछ विवरण मानक से छोड़े जाते हैं, इसके उपयोग के कुछ मुहावरे होना चाहिए, जैसे "संसाधन बनाने के लिए POST का उपयोग करें और अद्यतन करने के लिए PUT" । इसके अलावा, इस तरह के प्रोटोकॉल में सेवा के प्रवेश बिंदु शामिल होंगे (फिर से, सुलभ संसाधनों के संदर्भ में)।

    वे तीन पहलू पूरी तरह से डोमेन प्रोटोकॉल को परिभाषित करते हैं। विशेष रूप से, किसी ग्राहक को सेवा का उपयोग शुरू करने से पहले किसी भी आंतरिक लिंक को नहीं जानना चाहिए या बातचीत पूर्ण होने के बाद उन्हें याद रखना चाहिए। नतीजतन, आंतरिक नेविगेशन में /cakes/f5d96b5c नाम बदलने जैसे आंतरिक नेविगेशन में कोई भी परिवर्तन ग्राहक को प्रभावित नहीं करेगा जैसे ही यह प्रारंभिक अनुबंध का पालन करता है और दुकान के सामने के दरवाजे के माध्यम से प्रवेश करता है।

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