REST समुदाय में कोई नहीं कहता है कि REST आसान है। HATEOAS उन पहलुओं में से एक है जो एक REST आर्किटेक्चर में कठिनाई जोड़ता है।
लोग आपके द्वारा सुझाए गए सभी कारणों से HATEOAS नहीं करते: यह मुश्किल है। यह सर्वर साइड और क्लाइंट दोनों में जटिलता जोड़ता है (यदि आप वास्तव में इससे लाभ प्राप्त करना चाहते हैं)।
आज, अरबों लोग REST के लाभों का अनुभव करते हैं। क्या आप जानते हैं कि "चेकआउट" URL अमेज़न पर क्या है? मैं नही। फिर भी, मैं हर दिन चेकआउट कर सकता हूं। क्या वह URL बदल गया है? मुझे पता नहीं, मुझे परवाह नहीं है।
क्या आपको पता है परवाह है? जिस किसी ने भी स्क्रीन लिखी है वह अमेज़ॅन स्वचालित ग्राहक को स्क्रैप करता है। किसी को, जिनके पास संभावित रूप से वेब ट्रैफ़िक सूँघने की संभावना है, HTML पेज पढ़ें, आदि यह जानने के लिए कि कब और क्या लोड के साथ क्या कॉल करना है।
और जैसे ही अमेज़ॅन ने अपनी आंतरिक प्रक्रियाओं और URL संरचना को बदल दिया, उन कठिन कोडित क्लाइंट विफल हो गए - क्योंकि लिंक टूट गए।
फिर भी, कैज़ुअल वेब सर्फ़र दिन भर मुश्किल से ही खरीदारी कर पाते थे।
यही कारण है कि कार्रवाई में बाकी है, यह सिर्फ उस इंसान द्वारा संवर्धित है जो पाठ आधारित इंटरफ़ेस की व्याख्या करने और उसे इंटिग्रेट करने में सक्षम है, एक शॉपिंग कार्ट के साथ एक छोटे से ग्राफिक को पहचानता है, और यह बताता है कि वास्तव में इसका क्या मतलब है।
सॉफ्टवेयर लिखने वाले अधिकांश लोग ऐसा नहीं करते हैं। स्वचालित क्लाइंट लिखने वाले अधिकांश लोग परवाह नहीं करते हैं। ज्यादातर लोगों को अपने क्लाइंट को ठीक करना आसान लगता है, जब वे इंजीनियर की तुलना में पहले स्थान पर नहीं टूटते हैं। अधिकांश लोगों के पास पर्याप्त ग्राहक नहीं होते हैं जहां यह मायने रखता है।
यदि आप विशेषज्ञ तकनीक समर्थन और यातायात के दोनों किनारों पर आईटी के साथ दो प्रणाली के बीच संवाद करने के लिए एक आंतरिक एपीआई लिख रहे हैं, जो जल्दी, मज़बूती से और परिवर्तन की एक अनुसूची के साथ परिवर्तन संवाद करने में सक्षम हैं, तो REST आपको कुछ नहीं खरीदता है। आपको इसकी आवश्यकता नहीं है, आपका ऐप पर्याप्त बड़ा नहीं है, और यह लंबे समय तक मायने नहीं रखता है।
बड़े उपयोगकर्ता आधार वाली बड़ी साइटों में यह समस्या होती है। वे अपने सिस्टम के साथ बातचीत करते समय लोगों को अपने ग्राहक कोड को एक बार बदलने के लिए नहीं कह सकते। सर्वर डेवलपमेंट शेड्यूल क्लाइंट डेवलपमेंट शेड्यूल के समान नहीं है। एपीआई में अचानक परिवर्तन शामिल सभी के लिए अस्वीकार्य है, क्योंकि यह दोनों तरफ यातायात और संचालन को बाधित करता है।
इसलिए, इस तरह के एक ऑपरेशन से HATEOAS को बहुत फायदा होगा, क्योंकि यह आसान है संस्करण के लिए, पुराने क्लाइंट के लिए माइग्रेट करने में आसान, पीछे से संगत नहीं होना आसान है।
एक क्लाइंट जो इसके बारे में बहुत कुछ बताता है, वह सर्वर पर काम करता है, और नतीजों पर काम करने वाले क्लाइंट के सर्वर के बदलावों से ज्यादा मजबूत होता है जो ऐसा नहीं करता है।
लेकिन अधिकांश लोगों को उस लचीलेपन की आवश्यकता नहीं होती है। वे 2 या 3 विभागों के लिए सर्वर कोड लिख रहे हैं, यह सभी आंतरिक उपयोग है। यदि यह टूट जाता है, तो वे इसे ठीक कर देते हैं, और उन्होंने अपने सामान्य ऑपरेशन में यह तथ्य किया है।
लचीलापन, चाहे आरईएसटी या किसी और चीज से, जटिलता को जन्म देती है। यदि आप इसे सरल, और तेज़ चाहते हैं, तो आप इसे लचीला नहीं बनाते हैं, आप "बस करते हैं", और किया जा सकता है। जैसा कि आप सिस्टम में अमूर्तता और डेरेफेरिंग जोड़ते हैं, तो सामान अधिक कठिन हो जाता है, अधिक बॉयलर प्लेट, परीक्षण करने के लिए अधिक कोड।
REST का अधिकांश भाग "आपको इसकी आवश्यकता नहीं है" बुलेट बिंदु विफल हो जाता है। तक, निश्चित रूप से, आप करते हैं।
यदि आपको इसकी आवश्यकता है, तो इसका उपयोग करें, और इसका उपयोग करें जैसे कि इसे बाहर रखा गया है। REST HTTP पर आगे और पीछे सामान नहीं दिखा रहा है। यह कभी नहीं रहा है, यह उससे कहीं अधिक उच्च स्तर है।
लेकिन जब आपको REST की आवश्यकता होती है, और आप REST का उपयोग करते हैं, तो HATEOAS एक आवश्यकता है। यह पैकेज का हिस्सा है, और यह काम करने के लिए महत्वपूर्ण है।