api - रीस्टफुल एपीआई रनटाइम एक्सचेंजिबिलिटी/हैटओएएस क्लाइंट डिज़ाइन




rest discovery (6)

आपने अपना घर का काम किया और आप इसके दिल में पहुंचे: रनटाइम डिस्कवरी पवित्र ग्रिल है। इसका पीछा मत करो।

यूडीडीआई रनटाइम डिस्कवरी की एक जबरदस्त कहानी बताती है: http://en.wikipedia.org/wiki/Universal_Description_Discovery_and_Integration

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

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

  2. रनटाइम डिस्कवरी - क्लाइंट ऐप स्वयं को कम या बिना किसी बैंड की जानकारी के साथ आवश्यक सबकुछ समझने में सक्षम है (संभवतः, मीडिया प्रकारों के बारे में केवल एपीआई सौदों का ज्ञान।) लिंक गर्म हो सकते हैं। लेकिन एपीआई को बहुत ही कुशल बनाने के लिए, क्वेरी पैरामीटर के लिए बहुत से लिंक टेम्पलेटिंग की आवश्यकता होती है, जो ऑफ-ऑफ-बैंड जानकारी वापस आती है। संभवतः अन्य कठिनाइयों को मैंने अभी तक नहीं सोचा है क्योंकि मेरे पास नहीं है विकास में उस बिंदु पर प्राप्त किया। लेकिन मुझे ढीले युग्मन के विचार पसंद हैं।

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

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


इस वीडियो में जॉन मूर रनटाइम हैटियोस ऑटो डिस्कवरी का उपयोग कर एक सामान्य ग्राहक बनाता है। यह बहुत प्रभावशाली और देखने लायक है:

http://oredev.org/oredev2010/2010/sessions/hypermedia-apis.html


चित्त आकर्षण करनेवाला। आप जो वर्णन कर रहे हैं वह मूल रूप से हैटोस सिद्धांत है। आप क्या हेटोस पूछते हैं? इसे पढ़ें: http://en.wikipedia.org/wiki/HATEOAS

आम आदमी के शब्दों में, हैटओएएस का मतलब है लिंक का पालन करें। यह दृष्टिकोण आपके क्लाइंट को विशिष्ट यूआरएल से हटा देता है और आपको किसी को तोड़ने के बिना अपने एपीआई को बदलने की लचीलापन देता है।


तुम लिखो:

एपीआई को बहुत ही कुशल बनाने के लिए, क्वेरी पैरामीटर के लिए बहुत से लिंक टेम्पलेटिंग की आवश्यकता होती है, जो ऑफ-ऑफ-बैंड जानकारी वापस आती है।

यदि वह लिंक टेम्पलेट पिछले अनुरोध में प्रदान किया गया है, तो बैंड से बाहर की कोई जानकारी नहीं है। उदाहरण के लिए एक HTML खोज प्रपत्र एक HTML ( /search?q=hateoas ) उत्पन्न करने के लिए लिंक templating ( /search?q=%@ ) का उपयोग करता है, लेकिन HTML फॉर्म का उपयोग करने के अलावा क्लाइंट (वेब ​​ब्राउज़र) द्वारा कुछ भी ज्ञात नहीं है और GET


मूल रनटाइम डिस्कवरी क्लाइंट के दूसरे उदाहरण के लिए, एचएएल टॉक हाइपरमीडिया एपीआई क्लाइंट डेमो देखें

हाइपरटेक्स्ट एप्लिकेशन भाषा (लिंक करने के लिए एक्सएमएल + जेएसओएन स्कीमा) के आधार पर: http://stateless.co/hal_specification.html


यह निश्चित रूप से दरार करने के लिए एक कठिन अखरोट है। Google पर, हमने अपनी डिस्कवरी सेवा लागू की है कि हमारे सभी नए एपीआई बनाए गए हैं। टीएल; डीआर संस्करण हम एक जेएसओएन स्कीमा-जैसी कल्पना उत्पन्न करते हैं कि हमारे ग्राहक पार्स कर सकते हैं - उनमें से कई गतिशील रूप से।

इसका परिणाम डेवलपर के लिए आसान एसडीके उन्नयन और हमारे लिए आसान / बेहतर रखरखाव का मतलब है।

किसी भी तरह से सही समाधान नहीं है, लेकिन हमारे कई देवताओं को पसंद है।

अधिक जानकारी के लिए link देखें (और vid को देखना सुनिश्चित करें।)





hateoas