rest क्या वह आरईएसटी एपीआई वास्तव में आरपीसी है? रॉय फील्डिंग ऐसा सोचने लगता है




hateoas (8)

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

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

रॉय फील्डिंग के आरईएसटी एपीआई के पहले पैराग्राफ से हाइपरटेक्स्ट संचालित होना चाहिए , यह स्पष्ट है कि उनका मानना ​​है कि उनके काम का व्यापक रूप से गलत व्याख्या किया जा रहा है:

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

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

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

  • एक आरईएसटी एपीआई को निश्चित संसाधन नाम या पदानुक्रम (क्लाइंट और सर्वर का एक स्पष्ट युग्मन) परिभाषित नहीं करना चाहिए। ...

  • एक आरईएसटी एपीआई को संसाधनों का प्रतिनिधित्व करने और आवेदन राज्य चलाने के लिए उपयोग किए जाने वाले मीडिया प्रकार (या) को मौजूदा मानक मीडिया प्रकारों के लिए विस्तारित संबंध नाम और / या हाइपरटेक्स्ट-सक्षम मार्क-अप परिभाषित करने के लिए लगभग सभी वर्णनात्मक प्रयासों को खर्च करना चाहिए। ...

"हाइपरटेक्स्ट" का विचार केंद्रीय भूमिका निभाता है - यूआरआई संरचना से कहीं अधिक या HTTP क्रिया का क्या अर्थ है। "हाइपरटेक्स्ट" को टिप्पणियों में से एक में परिभाषित किया गया है:

जब मैं [फ़ील्डिंग] हाइपरटेक्स्ट कहता हूं, मेरा मतलब है सूचना और नियंत्रण की एक साथ प्रस्तुतिकरण जैसे कि जानकारी वह लाभ बन जाती है जिसके माध्यम से उपयोगकर्ता (या automaton) विकल्प प्राप्त करता है और क्रियाओं का चयन करता है। हाइपरमीडिया एक मीडिया धारा के भीतर अस्थायी एंकरों को शामिल करने के लिए किस पाठ का अर्थ है, इस पर विस्तार है; अधिकांश शोधकर्ताओं ने भेद छोड़ दिया है।

हाइपरटेक्स्ट को ब्राउज़र पर HTML होने की आवश्यकता नहीं है। जब वे डेटा प्रारूप और रिश्ते के प्रकार को समझते हैं तो मशीनें लिंक का पालन कर सकती हैं।

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

GET   /foos/{id}  # read a Foo
POST  /foos/{id}  # create a Foo
PUT   /foos/{id}  # update a Foo

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

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

पूरे सिस्टम की कुंजी यह है कि प्रतिक्रिया में मीडिया प्रकार में निहित हाइपरटेक्स्ट होता है जो स्वयं आगे बढ़ने के लिए एजेंट विकल्पों को व्यक्त करता है। यह इंसानों के लिए काम करने के तरीके के विपरीत नहीं है।

लेकिन यह इस विशेष पल में मेरा सबसे अच्छा अनुमान है।

फील्डिंग ने एक follow-up पोस्ट किया जिसमें उन्होंने आलोचना का जवाब दिया कि उनकी चर्चा बहुत सारणी थी, उदाहरणों में कमी, और शब्दकोष समृद्ध:

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

तो, एक व्यावहारिक मानसिकता के साथ आरईएसटी विशेषज्ञों के लिए दो सरल प्रश्न: आप कैसे व्याख्या कर रहे हैं कि फील्डिंग क्या कह रही है और आरईएसटी एपीआई दस्तावेज / कार्यान्वित करते समय आप इसे अभ्यास में कैसे डालते हैं?

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


आपकी व्याख्या मेरे लिए सही लगती है। मुझे विश्वास है कि फील्डिंग की बाधाओं को व्यावहारिक रूप से लागू किया जा सकता है।

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


आइए मान लें कि GET /foos/createForm को फॉर्म फ़ील्ड मान प्राप्त करने के लिए बुलाया जाता है जिसके लिए हम POST /foos बनाने के लिए प्रदान किए जाने चाहिए। अब इस विशेष यूआरएल यानी फूओस बनाने के लिए इस्तेमाल किया गया 1 फ़ील्डिंग के प्रस्ताव के मुताबिक GET /foos/createForm के लिए सबमिट एक्शन लिंक के रूप में प्रतिक्रिया के भीतर उल्लेख किया जाना चाहिए, है ना?
फिर कार्यों के लिए जाने-माने एचटीपी क्रियाओं को क्रियाओं के मानचित्रण का लाभ क्या है, "कोड / कॉन्फ़िगरेशन पर सम्मेलन" चीज़ को रद्द कर दिया गया है।


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

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

आपके प्रश्न पर: हमारे मानक दस्तावेज संसाधनों का खुलासा करते हैं, उन संसाधनों पर विभिन्न विधियों का प्रभाव, और प्रतिनिधित्व मीडिया प्रकारों और उनके स्कीमा, और उन प्रतिनिधित्वों में यूआरआई किस तरह के संसाधनों को इंगित करते हैं।

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


मुझे लगता है कि आपकी व्याख्या में ज्यादातर इसे शामिल किया गया है। यूआरआई अपारदर्शी पहचानकर्ता हैं जिन्हें अधिकांश भाग के लिए बुकमार्क यूआरआई से परे संवाद नहीं किया जाना चाहिए जिसका उपयोग उपयोगकर्ता एजेंट द्वारा ऐप तक पहुंचने के लिए किया जाता है।

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

यदि आप यूआरआई दस्तावेज करते हैं या उन्हें कैसे बनाते हैं, तो आप इसे गलत कर रहे हैं।


मुझे लगता है कि आरईएसटी अब वर्षों से बाहर हो गया है, टेक्नोलॉजिस्ट संसाधन के अवधारणा के साथ आते हैं और वास्तव में क्या है या नहीं है।

रिचर्डसन परिपक्वता मॉडल के मुताबिक, 4 स्तर (0-3) हैं जो परिभाषित करते हैं कि आपका एपीआई कितना रीस्टफुल है, 3 का अर्थ वास्तव में रीस्टफुल एपीआई है, जैसे रॉय फील्डिंग का इरादा है।

स्तर 0 तब होता है जब आपके पास एक प्रवेश बिंदु यूआरआई होता है - जैसे SOAP।

स्तर 1 का अर्थ है कि एपीआई विभिन्न संसाधनों के बीच अंतर करने में सक्षम है, और इसमें एक से अधिक प्रविष्टि बिंदु हैं - अभी भी एसओएपी की गंध है।

स्तर 2 तब होता है जब आप HTTP क्रियाओं का उपयोग करते हैं - मुख्य रूप से प्राप्त करें, पोस्ट करें, हटाएं। यह वह स्तर है जिस पर आरईएसटी वास्तव में तस्वीर में आता है।

स्तर 3 पर, आप अपने एपीआई को वास्तव में विश्वसनीय बनाने के लिए हाइपर्मियाडिया नियंत्रणों का उपयोग शुरू करते हैं।

आगे पढ़ने के लिए सुझाए गए लिंक:


रुचि रखने वालों के लिए, मुझे kenai.com/projects/suncloudapis/pages/Home में अभ्यास में हेटोएस का एक विस्तृत उदाहरण मिला।


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

आरईएसटी और संबंधित हेटोआस पर कुछ अच्छी चर्चाएं:

रीस्टफुल एपीआई में हैटओएएस का उपयोग (इसके अलावा) के लाभ

एक कप कॉफी कैसे प्राप्त करें





hateoas