समृद्ध वास्तुकला के पेशेवरों और विपक्ष [बंद]


20

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

1: सुरक्षा 2: प्रदर्शन 3: इंटरफ़ेस जटिलता

EDIT: इस प्रश्न के कुछ उत्तरों को देखते हुए - मुझे स्पष्ट करना चाहिए। मैं SOAP की तुलना में नहीं देख रहा हूँ - बल्कि REST अनुप्रयोगों बनाम अनुप्रयोगों का अवलोकन जहां सभी घटक एक होस्ट पर रहते हैं। (हालांकि उन जवाब के लिए धन्यवाद!)


3
फिर से सुझाव दें। प्रश्न सामान्य है और संभावित उत्तरों के उचित दायरे के साथ स्पष्ट है।
मिंगहुआ

जवाबों:


13

उन क्षेत्रों को देखते हुए, मैं एक मोटा अवलोकन दे सकता हूं, लेकिन मैं आपके लिए अपना निष्कर्ष नहीं निकाल सकता। दो मुख्य क्षेत्र हैं जहां दो प्रोटोकॉल भिन्न होते हैं:

  • संदेश स्वरूप
  • सेवा खोज

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

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

आपके द्वारा दी गई श्रेणियों से टूट गया:

सुरक्षा

न तो स्वाभाविक रूप से दूसरे की तुलना में अधिक सुरक्षित है। अच्छे सुरक्षा सिद्धांतों का उपयोग करें:

  • संचार एन्क्रिप्ट करें
  • सुनिश्चित करें कि आप प्रसंस्करण से पहले उपयोगकर्ताओं को प्रमाणित और अधिकृत करते हैं
  • सीधे हमलों से बचने के लिए अच्छी कोडिंग आदतें
  • और यह सिर्फ छोटी सूची है।

अस्पष्टता याद रखें! = सुरक्षा।

प्रदर्शन

कच्चे प्रदर्शन और मापनीयता दोनों सरल HTTP प्रोटोकॉल के अनुरोध के कारण REST में जाएंगे। अधिकांश एसओएपी स्टैक एसएएक्स पार्सिंग (घटना आधारित पार्सिंग) का उपयोग करते हैं जो एसओएपी स्टैक्स की स्केलेबिलिटी में सुधार करता है, लेकिन ओवरहेड के लिए एक औसत दर्जे का प्रभाव होता है। SOAP में XML पार्सिंग ओवरहेड के अलावा सामान्य HTTP प्रोसेसिंग ओवरहेड है। REST के पास केवल HTTP प्रोसेसिंग ओवरहेड है।

जटिलता

सिस्टम के दृष्टिकोण से, REST जीतता है। वहाँ कम चलती भागों, एक लीनर अनुरोध श्रृंखला, आदि इसका मतलब है कि यह विश्वसनीय बनाने के लिए आसान है।

प्रोग्रामर के दृष्टिकोण से, सोप जीत सकता है यदि आप जिस आईडीई या ढांचे का उपयोग कर रहे हैं वह इसके लिए अच्छा समर्थन प्रदान करता है। अनिवार्य रूप से, बाकी के साथ आप पर प्रीप्रोसेसिंग कार्य (प्रमाणीकरण / प्राधिकरण / आदि) करने के लिए होता है, जबकि SOAP के साथ बहुत कुछ एक प्लग करने योग्य प्रसंस्करण श्रृंखला के साथ पूरा किया जा सकता है।

मेरी प्राथिमिकता

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


1
एक विस्तृत जवाब के लिए +1। एक अच्छे जावा JAX-RS कार्यान्वयन के लिए RESTEasy का उपयोग करें। JAXB वेब सेवाओं के साथ संयुक्त अचानक तुच्छ हो जाते हैं।
गैरी रोवे

2
"इसके स्वभाव से REST पूर्वानुमानित अंतिम बिंदु प्रदान करता है, और अनुरोध की सामग्री एक साधारण HTTP अनुरोध है। लाभ यह है कि कोई अतिरिक्त ओवरहेड नहीं है, और अंतिम उपयोगकर्ता बहुत अधिक अनुमान लगा सकते हैं कि एक बार उन्हें समझने की आवश्यकता है कि उन्हें क्या करना चाहिए। आपकी साइट की URL संरचना। " वास्तव में, यह REST के HATEOAS बाधा ("अनुप्रयोग राज्य के इंजन के रूप में हाइपरमीडिया") के लिए काउंटर है यदि आप REST उचित बात कर रहे हैं। REST अधिवक्ताओं का एक खंड है जो URL संरचना को लागू करने के लिए आपको लिंच करेगा जो कि REST का एक पहलू है। मुझे लगता है कि दृढ़ता से नहीं, लेकिन कई अन्य करते हैं।
माइकस्किंकेल

1
और फिर भी एंडपॉइंट की अनुमानित प्रकृति से ऐप को डिज़ाइन करना और बनाना आसान हो जाता है। नोट: REST अनुप्रयोगों का समर्थन करने वाले चौखटे में URL का एक सुसंगत पैटर्न होता है, लेकिन वे आवश्यक रूप से रूपरेखा से रूपरेखा के अनुरूप नहीं होते हैं। URLs का वह नियमित पैटर्न केवल प्रोग्रामिंग कंस्ट्रक्शन और सुविधा की बात है। रूबी ऐप्स पर रूबी में आपके द्वारा देखे गए URL पैटर्न समर्थित कार्यों में समान हैं, लेकिन नाम ASP.NET MVC में भिन्न हैं।
बेरिन लोरिट्श

"URL द्वारा डिज़ाइन" करना रेस्टफुल डिज़ाइन करने का एक खराब तरीका है जो फ्रेमवर्क द्वारा प्रोत्साहित किया जाता है क्योंकि फ्रेमवर्क के लिए इसे इस तरह से करना आसान है। हालाँकि, यह आमतौर पर बुरी तरह से टूट जाता है जिसे आप सामान्य सीआरयूडी व्यवहार से बाहर निकलते हैं।
डारेल मिलर

12
  1. सुरक्षा: HTTPS का उपयोग करें। यह दोनों पर लागू होता है।
  2. प्रदर्शन: । REST कम CPU महंगा है (कम पार्सिंग, marshalling, unwrapping)। इसके अलावा, REST के साथ कैशिंग केक का एक टुकड़ा है।
  3. जटिलता: सेटअप के मामले में REST बहुत कम मांगता है, यह सब के बाद सिर्फ GET / POST है। SOAP को बनाए रखने (wsdl आदि) के लिए बहुत अधिक प्रशासन की आवश्यकता होती है, लेकिन अगर आपका IDE समर्थन करता है तो यह थोड़ा आसान है।

मुझे लगता है कि SOAP वैसे ही फूला हुआ है जब आप यही चीज REST और कुछ सामग्री / माइम-प्रकारों के साथ कर सकते हैं। इसके अलावा, एसओएपी बहुत सारे ओवरहेड लाता है, इसकी रैपिंग-ऑफ-रैपर प्रकृति और इस तथ्य के कारण कि यह अधिक सामान्य है और HTTP तक सीमित नहीं है। यदि आपकी IDE इसे ठीक से समर्थन करती है और आप HTTP नहीं सीखना चाहते हैं, तो SOAP उपयोग करने के लिए लुभा रहा है। लेकिन मेरे लिए, REST का उपयोग करना बहुत आसान है और बहुत अधिक वेब अनुकूल है।

आजकल, उपयोग करने के लिए बहुत अच्छे REST API हैं। यदि आप जावा में हैं, तो जावा-आरएस वास्तव में अच्छा है। कुछ लोगों के लिए, यह पोर्न की तरह है।


2
+1 क्योंकि साबुन है फूला हुआ। REST निश्चित रूप से जाने का रास्ता है। और JAX-RS के लिए यह लिंक प्रदर्शित करता है कि क्यों।
गैरी रोवे

1
वहाँ एक अच्छा। नेट बाकी स्टैक है?
ब्लैक


8

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

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

REST का एक और अक्सर-अनदेखा हिस्सा अधिकांश क्रियाओं की उदासीनता है। केवल GET ही नहीं, बल्कि PUT और DELETE भी एक ही परिणाम होना चाहिए यदि एक बार या कई बार लागू किया जाता है (यदि आप पहले से हटाए गए 404 को वापस करने के लिए स्वतंत्र हैं, या ग्राहक नहीं है तो 'कोई परिवर्तन नहीं')। यह मजबूत प्रणालियों और अर्थ विज्ञान की सटीक व्याख्याओं की कम निर्भरता की ओर जाता है।


1
आलस्य के लिए +1। मैंने इसे एक बार पहले भी देखा था लेकिन अब तक नहीं मिला। किसी को भी पता है कि पीडीएफ में आरामदायक डिजाइन के बारे में एक ट्यूटोरियल है इसका उल्लेख है?
मिन्हुआ

3

WS- * मानक वास्तव में SOAP / HTTP पर RPC चलाने के बारे में हैं। तो, सभी सोच जो कॉर्बा और जे 2 ईई में चले गए और उनके पूर्ववर्ती ज्यादातर एक्सएमएल में एक ही तरह की चीजें करने के लिए चले गए हैं। इसका मतलब है कि टाइप डिक्लेरेशन और सर्विस कॉन्ट्रैक्ट, मेटाडेटा एक्सचेंज, डिक्लेरेटिव सिक्योरिटी आदि। यह सब असली "एंटरप्रिसिए" सामान है। उद्यम में भी इसका अत्यधिक उपयोग किया जाता है, स्पष्ट रूप से।

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


वास्तव में: WS- * मानकों का मेरा अनुभव यह रहा है कि वे "मानकों" का एक शानदार उदाहरण हैं जहां हर एक कार्यान्वयन अलग और अक्षम है। सार्वजनिक सामना करने वाली सेवाओं के लिए इसे सरल, इमो, और एक ही प्लेटफॉर्म पर चलने वाले सिस्टम के बीच निजी संचार के लिए SOAP का उपयोग करें।
कार्सॉन 63000

0

वर्तमान REST कार्यान्वयन पर SOAP का केवल बड़ा लाभ यह है कि SOAP अधिक आसानी से टूलींग है - अधिकांश RESTful क्लाइंट्स को इंटरफ़ेस को समझने और किसी प्रकार का क्लाइंट लिखने की आवश्यकता होती है। SOAP के लिए, मैं बस इस पर wsdl.exe इंगित करता हूं और यह मेरे लिए कक्षाएं उत्पन्न करता है।


1
क्या आपने कभी SOAP आत्मनिरीक्षण उपकरण लिखा है? यह एक अप्रिय अनुभव है जो आपको REST पर ले जाएगा।
pydanny 14

1
नहीं, लेकिन अधिकांश प्लेटफार्मों पर एक SOAP को देखता है, जो आत्मनिरीक्षण उपकरण का निर्माण करता है। अगर मैं एक निर्माण कर रहा था या आराम कर रहा था तो मैं REST काम कर रहा था।
व्याट बार्नेट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.