क्या यह "एंटी-पैटर्न" है और क्या मुझे इसका उपयोग करना बंद कर देना चाहिए या यह चतुर डिजाइन है?


10

REST सेवा बनाते समय मैंने मूल रूप से निम्न कार्य करने का प्रयास किया है:

  1. HTML का अनुरोध किया जाता है
  2. सेवा वांछित वेब पेज लौटाती है, लेकिन बिना अनुरोध किए "संसाधन", जैसे। डेटा
  3. वेब पेज में जावास्क्रिप्ट शामिल है जो AJAX को एक ही सेवा के लिए अनुरोध करता है (विभिन्न सामग्री-प्रकार)
  4. सेवा फिर वास्तविक डेटा (JSON) लौटाती है और पृष्ठ उसे प्रदर्शित करता है

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

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

अब इससे पहले कि मैं इसका उपयोग करूं, क्या यह एक अच्छा विचार है या मुझे इसे करना बंद कर देना चाहिए?


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

3
क्या आप विशेष रूप से विस्तृत कर सकते हैं कि आपको क्या लगता है कि बुरा है? प्रसंग: यह एक 10 Mio LOC जानवर नहीं है, जो व्यापार के लिए महत्वपूर्ण है। यह अधिक पसंद है <5000 LOC और अगर यह कुछ दिनों के लिए काम नहीं करता है तो कोई बात नहीं। हां, यह नहीं है कि मुझे भद्दा सामान करना चाहिए, इसलिए जो आपको लगता है कि बहुत बुरा है, उसे शांत करें।
beginner_

@begginer_ हर सॉफ्टवेयर छोटा शुरू होता है। क्या आप rseembles एक Rube गोल्डवर्ग मशीन का वर्णन: हथौड़ा हिट आदमी, आदमी बिस्कुट, तोता हड़पने बिस्कुट चला जाता है और फूलदान, आदि झुक जाता है
Tulains Córdova

ऐसा करने का कारण अक्सर प्रदर्शन में सुधार होता है, जहां डेटा को अलग-अलग एक साथ कई अनुरोधों के साथ किया जा सकता है जो कि अलग-अलग सर्वर हो सकते हैं। ऐसा नहीं लगता कि यह आपके मामले में लागू होता है।
user16764

आप इस सेवा का उपयोग स्क्रिप्ट्स, या कर्ल से कैसे कर सकते हैं? उन चीजों में जावास्क्रिप्ट दुभाषिए नहीं हैं। क्या यह केवल ब्राउज़र-सेवा के लिए है?
ब्रायन ओकले

जवाबों:


17

यदि आप किसी संसाधन का अनुरोध करते हैं और इसमें डेटा नहीं है, तो यह REST सेवा नहीं है। Json में वास्तविक डेटा प्रदान करने वाली सेवा हो सकती है, लेकिन HTML भाग नहीं है। एक वेब अनुप्रयोग के लिए यह कोई फर्क नहीं पड़ता।

तकनीक काम करती है, लेकिन आपको इसकी सीमाओं के बारे में पता होना चाहिए:

  1. खोज इंजन जावास्क्रिप्ट की व्याख्या नहीं करते हैं, इसलिए इस तरह लागू की गई साइट Google और पसंद द्वारा अनुक्रमित नहीं होगी। आंतरिक अनुप्रयोग के लिए यह मायने नहीं रखता है, जनता के लिए यह एक बहुत मायने रखता है।
  2. विशेष आवश्यकताओं वाले उपयोगकर्ता (जैसे ब्रेल टर्मिनलों का उपयोग करने वाले) विशेष ब्राउज़रों का उपयोग करते हैं जो कि सीमित हैं और जावास्क्रिप्ट को ठीक से व्याख्या नहीं कर सकते हैं।

मैं यह भी नोट करूंगा कि HTML उत्पन्न करने वाला कोड मूल रूप से एक ही है चाहे वह सर्वर-साइड या क्लाइंट-साइड चलता हो। आपके पास सर्वर-साइड पर दोनों भाषाओं और रूपरेखाओं का बहुत बड़ा विकल्प है और मुझे यकीन है कि इसमें स्लीकग्रिड के कई समकक्ष भी हैं।

आप कर सकते हैं, और चाहिए, फिर भी सर्वर पर डेटा और प्रदर्शन को अलग करना चाहिए। टेम्प्लेट सिस्टम, डेटा को केवल डेटा संरचना या यहां तक ​​कि json के रूप में ले सकता है (विशेषकर यदि वास्तविक सेवा टेम्पलेट सिस्टम से अलग भाषा में है) और बस उस डेटा के साथ एक टेम्प्लेट का विस्तार करें।

और नहीं, मैं PHP के बारे में नहीं सोच रहा हूँ; यह वहां से कम से कम सक्षम टेम्पलेट प्रणाली है (हालांकि इसके शीर्ष पर निर्मित कुछ बेहतर हैं)। मैं Genshi या XSLT या कुछ और भी उन्नत सोच रहा हूं जो वेब विजेट प्रदान करता है।


मैं जावास्क्रिप्ट में वसा-ग्राहक लिखता हूं, जो ठीक यही करते हैं। लेकिन यह शायद सामान्य वेबसाइटों के लिए एक बुरा विचार है।
के ..

यह क्यों नहीं है?
डेगनलीज

1
यदि आप "डेटा" के बीच अंतर करते हैं जो एप्लिकेशन (HTML, JS, CSS आदि) बनाता है और "डेटा" जिसे एप्लिकेशन JSON (JSON) प्रदर्शित करता है वह REST है, लेकिन वह भाग जो "कोड" isn 'को लोड करता है टी। यदि आप पूरी चीज़ को अधिक सार देखते हैं, तो दोनों हैं।
के ..

2

ऐसा करने में कुछ भी गलत नहीं है, जब तक आप अपने कोड को साफ-सुथरा बनाना सुनिश्चित करते हैं। तुम भी अपनी वेब सेवा के बजाय एक अपाचे जैसे स्थिर सामग्री की सेवा कर सकते हैं।


2
अपाचे स्थिर सामग्री के लिए एक ओवरकिल है। बहुत तेज सर्वर हैं। सबसे लोकप्रिय Nginx लगता है ।
Jan Hudec

5
यह एक उदाहरण था, इससे ज्यादा कुछ नहीं।
स्टीवन श्लैंस्कर

2

यह एक अच्छा अभ्यास है। और यह हर समय किया जाता है, @JanHudec के रूप में अल्थोगुग बताते हैं, इसे एक REST सेवा गलत है। लेकिन कई वेबसाइट ठीक यही कारण बताती हैं कि आप किन कारणों से इशारा करते हैं।


1
... और बड़ा कारण यह है कि कई लोग ऐसा करते हैं क्योंकि डेटा इंटरैक्शन वैसे भी सेवाओं / JSON के माध्यम से होता है , इसलिए आपके सभी डेटा इंटरैक्शन को उसी तरह से हैंडल करना बेहतर होगा। (यानी यदि आप एक टेबल को रिफ्रेश करने के लिए AJAX का उपयोग कर रहे हैं ... तो आपको इसे पहली बार टेबल बनाने के लिए भी उपयोग करना चाहिए।)
चाड थॉम्पसन

@ChadThompson हाँ, मुझे लगता है कि अगर मैं पहली बार कहीं इस तरह की चीजों का निर्माण नहीं करता हूं , तो कहीं न कहीं लाइन के नीचे मुझे कुछ करने वाले ग्राहक के आधार पर पृष्ठ को गतिशील रूप से अपडेट करने का अनुरोध मिलेगा - इसका मतलब है कि एक साधारण कार्यान्वयन अब क्लाइंट और सर्वर दोनों को यह बताता है कि पेज कैसे बनाया जाए। पहली जगह में ग्राहक पर इसे बनाना आसान है।
टैक्रॉय

1

मैं इसे एक एंटी-पैटर्न नहीं कहूंगा, जो आप वर्णन कर रहे हैं वह कमोबेश एक मोटा ग्राहक है , न कि ट्रेलो जैसी सेवाओं के विपरीत। सर्वर की प्रारंभिक जिम्मेदारी DOM को भेजने की है और क्लाइंट को काम करने के लिए जो भी संसाधन चाहिए। मैंने डाटा सेंटर ऑटोमेशन और नेटवर्क मॉनिटरिंग में इसी तरह की परियोजनाओं पर काम किया है।

क्लाइंट एक विरल DOM के रूप में शुरू होता है, XHR (कभी-कभी JSONP) के माध्यम से कुछ डेटा में खींचता है और अंत में खुद को एक सॉकेट सर्वर से जोड़ता है। एक और भी अधिक मूल उदाहरण एक चैट एप्लिकेशन होगा।

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

यदि अधिक सुविधाओं को जोड़ने का विचार आपको डराने लगता है, या आप खोजने लगते हैं कि डिबगिंग एक बुरा सपना है, तो आप उत्पादन में अन्य तरीकों पर विचार करना चाह सकते हैं जब आप प्रयोग करना और सीखना जारी रखेंगे।

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


"यादृच्छिक जेएस" से आपका क्या मतलब है? मेरे मामले में आप जो ऊपर बता रहे हैं, वह बहुत अधिक जटिल है जो मेरे पास है (कुछ इनपुट फ़ील्ड और एक टेबल (स्लीक्रगिड) या jquery ui टैब)। बस इतना ही। प्रति पृष्ठ लगभग 200 LOC।
beginner_

0

जैसा कि @Jan Hudec ने कहा, आपके दृष्टिकोण को निश्चित रूप से REST नहीं कहा जा सकता है। हालांकि वह हिस्सा जहां ग्राहक एक संसाधन के लिए अनुरोध करता है। यह बेहतर है अगर क्लाइंट प्रेजेंटेशन पार्ट को हैंडल backboneकरता है , जैसे करता है। यह संसाधनों के लिए REST सर्वर के साथ संचार करता है और उनका उपयोग करके प्रदर्शित करता है views


0

यह एक विरोधी पैटर्न हो सकता है, लेकिन मुझे लगता है कि यह वेब अनुप्रयोगों का भविष्य भी है। जावास्क्रिप्ट के साथ छेड़छाड़ करने के बजाय, आपको कम से कम एक टेम्प्लेटिंग लाइब्रेरी का उपयोग करना चाहिए। एक बेहतर समाधान एक क्लाइंट-साइड MVC फ्रेम है, जैसे AngularJS (जो मुझे अब उपयोग करना होगा)।

कुछ और संदर्भों के लिए, यहां एक लोकप्रिय ब्लॉग पोस्ट कई रूपरेखाओं की तुलना कर रहा है, और यहां एक साइट है जो समान प्रोग्राम का उपयोग करके एक ही प्रोग्राम लागू करता है।

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


thx ने कभी भी AngularJS के बारे में नहीं सुना। लेकिन मुझे लगता है कि मेरी वर्तमान जरूरतों के लिए यह बहुत ज्यादा है।
beginner_

0

आपका काम अच्छा लग रहा है! हालाँकि यदि आपके jSON प्रतिक्रियाओं में कोई HTML है तो आपका समय बर्बाद कर रहा है।

एक और बात यह है कि आपका गूंगा ग्राहक शायद एक अलग परियोजना से अपने डेटा को प्राप्त कर रहा है। आपको ग्राहक और सेवा के बीच उचित पृथक्करण का लक्ष्य रखना चाहिए तब आपके पास एक उचित सेवा होगी

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.