क्या नेटफ्लिक्स या ट्विटर शैली की वेब सेवा को REST या SOAP का उपयोग करना चाहिए? [बन्द है]


145

मैंने दो REST सेवाएँ लागू की हैं: Twitter और Netflix। दोनों बार, मैं SOAP के बजाय REST के रूप में इन सेवाओं को उजागर करने के निर्णय में शामिल उपयोग और तर्क को खोजने के लिए संघर्ष किया। मुझे आशा है कि कोई मुझे याद कर रहा है जो मुझे याद आ रहा है और समझा सकता है कि आरईएसटी को इन जैसी सेवाओं के लिए सेवा कार्यान्वयन के रूप में क्यों इस्तेमाल किया गया था।

  1. REST सेवा को लागू करने से SOAP सेवा को लागू करने में अधिक समय लगता है। WSDL और आउटपुट प्रॉक्सी क्लासेस और क्लाइंट्स में पढ़ने के लिए सभी आधुनिक भाषाओं / चौखटों / प्लेटफार्मों के लिए उपकरण मौजूद हैं। REST सेवा को कार्यान्वित करना हाथ से किया जाता है और - इसे प्राप्त करें - प्रलेखन को पढ़कर। इसके अलावा, इन दो सेवाओं को लागू करते समय, आपको "अनुमान" बनाना होगा कि पाइप में क्या वापस आएगा क्योंकि कोई वास्तविक स्कीमा या संदर्भ दस्तावेज़ नहीं है।

  2. क्यों एक सेवा है कि XML वैसे भी देता है लिखें? एकमात्र अंतर यह है कि REST के साथ आपको पता नहीं है कि प्रत्येक तत्व / विशेषता किस प्रकार का प्रतिनिधित्व करती है - आप इसे लागू करने के लिए अपने दम पर हैं और आशा करते हैं कि एक दिन एक स्ट्रिंग उस क्षेत्र में नहीं आती है जिसे आपने सोचा था कि वह हमेशा एक इंट था। एसओएपी डब्ल्यूएसडीएल का उपयोग करके डेटा संरचना को परिभाषित करता है इसलिए यह एक नो-ब्रेनर है।

  3. मैंने शिकायत सुनी है कि SOAP के साथ आपके पास SOAP लिफाफे का "ओवरहेड" है। इस दिन और उम्र में, क्या हमें वास्तव में मुट्ठी भर बाइट्स के बारे में चिंता करने की ज़रूरत है?

  4. मैंने यह तर्क सुना है कि REST के साथ आप केवल URL को ब्राउज़र में पॉप कर सकते हैं और डेटा देख सकते हैं। ज़रूर, अगर आपकी REST सेवा सरल या बिना प्रमाणीकरण का उपयोग कर रही है। उदाहरण के लिए, नेटफ्लिक्स सेवा, OAuth का उपयोग करती है जिसके लिए आपको चीजों पर हस्ताक्षर करने और चीजों को एनकोड करने से पहले आपको अपना अनुरोध सबमिट करने की आवश्यकता होती है।

  5. हमें प्रत्येक संसाधन के लिए "पठनीय" URL की आवश्यकता क्यों है? यदि हम सेवा को लागू करने के लिए एक उपकरण का उपयोग कर रहे थे, तो क्या हम वास्तव में वास्तविक URL की परवाह करते हैं?


5
आपको ध्यान देना चाहिए कि REST का आविष्कार नहीं किया गया है, यह HTTP की शुरुआत के बाद से मौजूद है।
डर्क वोल्मार

5
आपके और रॉय फील्डिंग के बीच की बातचीत काफी मनोरंजक होगी। :)
गर्ट ग्रेन्डर

1
हमें शुरू करने के लिए कुछ चीजें। सबसे पहले, नफरत एक मजबूत शब्द है। दूसरा, हमारा उद्योग चीजों को करने के लिए एक से अधिक तरीकों से भरा है। इसलिए मैं REST के अस्तित्व के लिए दार्शनिक तर्क में नहीं जा रहा हूं । एक अच्छे डेवलपर के रूप में, आपको समस्या को हल करने के लिए जो भी हो, तकनीक का उपयोग करने के लिए खुला होना चाहिए। कुछ वेब सेवाओं के लिए, यह REST हो सकता है। मैंने और लिखा, लेकिन यह बंद हो गया;)
जेसन मैकक्रेरी

1
@ जो: प्वाइंट लिया गया। लेकिन REST की विडंबना का एक हिस्सा यह है कि यह "नई" तकनीक नहीं है, यह 90 के दशक के बाद से काम करने वाली किसी चीज़ के लिए एक नया मूलमंत्र है। और @ jsm11482: यही कारण है कि यह प्रश्न "व्यक्तिपरक और तर्कवादी" के रूप में बंद है - क्योंकि यह तर्कों को आकर्षित करता है!
डेनियल प्राइडेन

2
इस सवाल का मेरा जवाब यहाँ है। थोड़ा
डारेल मिलर

जवाबों:


193

कोयले की खान में एक कैनरी।

मैं एक साल से इस तरह के सवाल का इंतजार कर रहा हूं। यह अवश्यंभावी था कि यह दिन आएगा और मुझे यकीन है कि हम आने वाले महीनों में इस तरह के कई और सवाल देखने वाले हैं।

चेतावनी के संकेत

आप बिल्कुल सही हैं, SOAP क्लाइंट की तुलना में RESTful क्लाइंट बनाने में अधिक समय लगता है। SOAP टूलकिट बहुत सारे बॉयलरप्लेट कोड को हटा देते हैं और क्लाइंट प्रॉक्सी ऑब्जेक्ट को लगभग बिना किसी प्रयास के उपलब्ध कराते हैं। विज़ुअल स्टूडियो और सर्वर URL जैसे टूल के साथ, मैं स्थानीय स्तर पर पांच मिनट के भीतर, मनमाने ढंग से जटिलता की दूरस्थ वस्तुओं तक पहुंच सकता हूं।

अनुप्रयोग / xml और अनुप्रयोग / json पर लौटने वाली सेवाएँ क्लाइंट डेवलपर्स के लिए बहुत कष्टप्रद होती हैं। डेटा के उस बूँद के साथ हम क्या करने वाले हैं?

सौभाग्य से, बहुत सी साइटें जो REST सेवाएँ प्रदान करती हैं, क्लाइंट क्लायंट लाइब्रेरीज़ का एक गुच्छा भी प्रदान करती हैं, ताकि हम उन लाइब्रेरियों का उपयोग दृढ़ता से टाइप की गई वस्तुओं के एक समूह तक पहुँच पाने में कर सकें। हालांकि गूंगा लगता है। यदि उन्होंने SOAP का उपयोग किया था, तो हम उन प्रॉक्सी कक्षाओं को स्वयं कोड-जीन कर सकते थे।

सोप ओवरहेड, हा। यह विलंबता है जो मारता है। यदि लोग वास्तव में तार के पार जाने वाले अतिरिक्त बाइट्स की संख्या के बारे में चिंतित हैं, तो शायद HTTP सही विकल्प नहीं है। क्या आपने देखा है कि उपयोगकर्ता-एजेंट हेडर द्वारा कितने बाइट्स का उपयोग किया जाता है?

हाँ, क्या आपने कभी HTML और जावास्क्रिप्ट के अलावा किसी अन्य के लिए डिबगिंग टूल के रूप में वेब ब्राउज़र का उपयोग करने की कोशिश की है। मेरा विश्वास करो यह बेकार है। आप केवल दो क्रियाओं का उपयोग कर सकते हैं, कैशिंग लगातार रास्ते में हो रही है, त्रुटि को संभालने में इतनी जानकारी निगल जाती है, यह लगातार एक गॉडडैम favicon.ico की तलाश में है। बस मुझे गोली मार दो।

पठनीय URL। केवल संज्ञा, कोई क्रिया नहीं। हाँ, यह तब तक आसान है जब तक हम केवल CRUD ऑपरेशन कर रहे हैं और हमें केवल एक तरह से वस्तुओं के पदानुक्रम तक पहुँचने की आवश्यकता है। दुर्भाग्य से अधिकांश अनुप्रयोगों के लिए इससे कहीं अधिक कार्यशीलता की आवश्यकता होती है।

आसन्न आपदा

वर्तमान में विकसित हो रहे डेवलपर्स के एक मेट्रिक बोट लोड हैं जो REST सेवाओं के साथ एकीकृत हैं जो आपके पास उसी निष्कर्ष पर आने की प्रक्रिया में हैं। उन्हें सादगी, लचीलापन, स्केलेबिलिटी, evolvabilty और सीरेंडिपिटस पुन: उपयोग की पवित्र कब्र का वादा किया गया था। वेब की विशेषताएं, कैसे चीजें गलत हो सकती हैं।

हालाँकि, वे यह पता लगा रहे हैं कि संस्करण बनाना एक समस्या के रूप में है, लेकिन संकलक मुद्दों का पता लगाने में मदद नहीं करता है। हाथ से लिखे क्लाइंट कोड को बनाए रखने के लिए एक दर्द है क्योंकि डेटा संरचनाएं विकसित होती हैं और URL फिर से सक्रिय हो जाते हैं। केवल संज्ञाओं और चार क्रियाओं के आसपास एपीआई डिजाइन करना वास्तव में कठिन हो सकता है, विशेष रूप से Restful Url zealots जब आप यह कह सकते हैं कि आप क्वेरी स्ट्रिंग का उपयोग नहीं कर सकते हैं।

डेवलपर्स पूछना शुरू करने जा रहे हैं कि हम अपने प्रयासों को Json प्रारूपों और Xml प्रारूपों दोनों के समर्थन पर क्यों बर्बाद कर रहे हैं, क्यों न केवल एक पर हमारे प्रयासों को केंद्रित करें और इसे अच्छी तरह से करें?

चीजें इतनी गलत कैसे हुईं

मैं बताता हूँ कि क्या गलत हुआ। हम डेवलपर्स के रूप में विपणन विभागों को हमारी प्राथमिक कमजोरी का फायदा उठाने देते हैं। चांदी की गोली के लिए हमारी शाश्वत खोज ने हमें वास्तविकता की ओर अंधा कर दिया कि वास्तव में क्या है। सतह पर REST इतना आसान और सरल लगता है। Urls के साथ अपने संसाधनों को नाम दें और GET, PUT, POST और DELETE का उपयोग करें। नरक, हम देवों को पहले से ही जानते हैं कि यह कैसे करना है, हम वर्षों से डेटाबेस के साथ काम कर रहे हैं जिसमें टेबल और कॉलम और SQL स्टेटमेंट हैं जो SELECT, INSERT, UPDATE और DELETE हैं। यह केक का एक टुकड़ा होना चाहिए था।

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

REST का यह डाउनग्रेड किया गया संस्करण कई मायनों में डेवलपर संस्कृति में मान्य हो गया। सर्वर फ्रेमवर्क बनाए गए थे जो संसाधन पहचान और समान इंटरफ़ेस को प्रोत्साहित करते थे, लेकिन अन्य बाधाओं का समर्थन करने के लिए कुछ भी नहीं किया। दृष्टिकोणों को विभेदित करने के लिए शर्तें शुरू हुईं, (HI-REST बनाम LO-REST, कॉर्पोरेट REST बनाम अकादमिक परीक्षा, REST बनाम RESTful)।

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

REST, शब्द, निश्चित रूप से मुख्यधारा बन गया है। लगभग हर बड़ी वेब प्रॉपर्टी जिसमें API होता है, "REST" का समर्थन करती है। ट्विटर और नेटफ्लिक्स दो बहुत ही हाई प्रोफाइल हैं। डरावनी बात यह है कि मैं केवल एक सार्वजनिक एपीआई के बारे में सोच सकता हूं जो स्व-वर्णनात्मक है और कुछ मुट्ठी भर हैं जो वास्तव में हाइपरमीडिया बाधा को लागू करते हैं। निश्चित रूप से कुछ साइटें जैसे StackOverflow और Gowalla उनकी प्रतिक्रियाओं में लिंक का समर्थन करती हैं, लेकिन उनके लिंक में भारी अंतराल छेद हैं। StackOverflow API का कोई मूल पृष्ठ नहीं है। कल्पना करें कि यदि वेब साइट के लिए कोई होम पेज नहीं होता तो वेब साइट कितनी सफल होती!

आपको गुमराह किया गया मुझे डर है

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

REST क्लाइंट SOAP क्लाइंट की तुलना में अधिक समय तक निर्माण करते हैं, लेकिन वे एक विशिष्ट सेवा से बंधे नहीं होते हैं, इसलिए आपको उन्हें सेवाओं में पुनः उपयोग करने में सक्षम होना चाहिए। क्लासिक उदाहरण लें, एक वेब ब्राउज़र के लिए। वेब ब्राउज़र कितनी सेवाओं तक पहुँच सकता है? फ़ीड रीडर के बारे में क्या? अब औसत ट्विटर क्लाइंट तक कितनी अलग-अलग सेवाएं पहुँच सकती हैं? हाँ, बस एक।

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

आपको "अनुमान" बनाना होगा कि पाइप में क्या वापस आएगा क्योंकि कोई वास्तविक स्कीमा या संदर्भ दस्तावेज़ नहीं है

आप ट्विटर जैसी सेवाओं के लिए बिल्कुल सही हैं। हालांकि, REST में स्व-वर्णनात्मक बाधा का कहना है कि HTTP सामग्री प्रकार हेडर को उस सामग्री का सटीक वर्णन करना चाहिए जो तार के पार प्रेषित हो रही है। आवेदन / json और अनुप्रयोग / xml वितरित करना आपको सामग्री के बारे में कुछ नहीं बताता है।

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

REST मीडिया द्वारा किस प्रकार का समर्थन करता है और कैशिंग के लिए परिष्कृत समर्थन होने के बारे में बहुत लचीला होने के कारण अपने प्रदर्शन लाभ का अधिक लाभ उठाता है। अच्छी तरह से काम करने के लिए कैशिंग के लिए हालांकि लगभग सभी बाधाओं का पालन किया जाना चाहिए।

पठनीय यूरल्स के बारे में आपका अंतिम बिंदु अब तक का सबसे विडंबनापूर्ण है। यदि आप वास्तव में हाइपरमीडिया बाधा के लिए प्रतिबद्ध हैं, तो प्रत्येक URL एक GUID हो सकता है और क्लाइंट डेवलपर पठनीयता में कुछ भी नहीं खोएगा।

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

Twitter API RESTful होने के करीब भी नहीं है और यही कारण है कि आप SOAP पर इसका उपयोग करने में कोई लाभ नहीं देख पा रहे हैं। नेटफ्लिक्स एपीआई बहुत करीब है, लेकिन यह सामान्य मीडिया प्रकारों का उपयोग करता है जो दर्शाता है कि एक भी बाधा का पालन करने में विफल रहने से सेवा से प्राप्त लाभ पर गहरा प्रभाव पड़ सकता है।

हो सकता है यह सब उनकी गलती न हो

मैंने सर्विस प्रोवाइडर्स पर पूरी तरह से डंपिंग की है, लेकिन RESTfully डांस करने में दो लगते हैं। एक सेवा सभी बाधाओं का धार्मिक रूप से पालन कर सकती है और एक ग्राहक अभी भी आसानी से सभी लाभों को पूर्ववत कर सकता है।

यदि एक क्लाइंट हार्ड कोड कुछ प्रकार के संसाधनों तक पहुंचने के लिए आग्रह करता है तो यह सर्वर को उन यूआरएल को बदलने से रोक रहा है। किसी भी प्रकार का URL निर्माण इस बात का निहित ज्ञान पर आधारित है कि सेवा अपने url का उल्लंघन कैसे करती है।

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

क्या उन्हें SOAP का इस्तेमाल करना चाहिए था?

निजी तौर पर, मुझे ऐसा नहीं लगता। किया गया अधिकार लंबे समय तक वितरित प्रणाली को विकसित करने की अनुमति देता है। यदि आप वितरित सिस्टम का निर्माण कर रहे हैं जिसमें ऐसे घटक हैं जो विभिन्न लोगों द्वारा विकसित किए गए हैं और कई वर्षों तक चलने की आवश्यकता है, तो REST एक बहुत अच्छा विकल्प है।


4
यह सब सच नहीं हो सकता है। अमेज़ॅन के पास अपनी वेब सेवाओं के लिए SOAP और REST दोनों इंटरफेस हैं, और उनका 85% उपयोग REST इंटरफ़ेस का है। SOAP स्टैक पर कॉरपोरेट प्रचार के सभी होने के बावजूद, यह बहुत ही आकर्षक साक्ष्य है जो डेवलपर्स को सरल रीस्ट दृष्टिकोण पसंद है। स्रोत: अजवायन की पत्ती.com
सूरज चंद्रन

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

61

SOAP एक ऑब्जेक्ट-ओरिएंटेड , दूरस्थ प्रक्रिया कॉल टेक्नोलॉजी स्टैक है। यह एक मौजूदा प्रोटोकॉल (HTTP) के शीर्ष पर एक नया अमूर्त निर्माण करके काम करता है।

REST एक दस्तावेज़ उन्मुख दृष्टिकोण है, जो बस मौजूदा प्रोटोकॉल (HTTP) की सुविधाओं का उपयोग करता है। "REST" केवल एक चर्चा है - अवधारणा यह है: जिस तरह से इसे डिज़ाइन किया गया था वैसा ही वेब का उपयोग करें से काम लिए !

प्रश्न के संपादन के जवाब में:

  1. "REST सेवा को लागू करने से SOAP सेवा को लागू करने में अधिक समय लगता है।"

    उम, नहीं, यह असीम रूप से लंबा नहीं हो सकता । और ऐसे मामलों में जहां आप पुनः प्राप्त करने की कोशिश कर रहे हैं, पहले से ही एक दस्तावेज या फ़ाइल है , यह वास्तव में बहुत तेज है । उदाहरण के लिए, WMS (वेब ​​मैपिंग सर्विस) के लिए OGC कल्पना प्रोटोकॉल के SOAP और REST दोनों संस्करण को परिभाषित करती है, और इसका एक कारण है कि लगभग कोई भी SOAP संस्करण लागू नहीं करता है - ऐसा इसलिए है क्योंकि यदि आप मानचित्र प्राप्त करने का प्रयास कर रहे हैं, तो यह बहुत आसान है बस एक URL बनाने के लिए और उस URL से छवि बाइट प्राप्त करने की तुलना में यह एक SOAP संदेश में encapsulating के साथ परेशान करने के लिए है। लेकिन हां, मैं इस बात से सहमत हूं कि अगर वेब सेवा का उद्देश्य किसी डोमेन ऑब्जेक्ट मॉडल में कुछ दृढ़ता से टाइप की गई वस्तु को स्थानांतरित करना है, तो SOAP उस उपयोग के लिए बेहतर अनुकूल है।

  2. "क्यों एक REST सेवा लिखें जो XML को वैसे भी लौटा दे?"

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

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

  3. "मैंने शिकायत सुनी है कि SOAP के साथ आपके पास SOAP लिफाफे का" ओवरहेड "है। इस दिन और उम्र में, क्या हमें वास्तव में मुट्ठी भर बाइट्स के बारे में चिंता करने की ज़रूरत है?"

    हाँ। हर परिस्थिति में नहीं, लेकिन बहुत सारे ट्रैफ़िक वाले स्थल हैं जहाँ इससे फर्क पड़ता है। क्या यह REST के बजाय SOAP का उपयोग करने के शब्दार्थ अंतर को पछाड़ने के लिए पर्याप्त है ? मुझे शक है। यदि आप किसी प्रोटोकॉल को हटाते हुए ऑब्जेक्ट कर रहे हैं और बाइट्स की संख्या में अंतर हो रहा है, तो SOAP आपके लिए वैसे भी संभवतः टूल नहीं है - हो सकता है कि आप इसके बजाय CORBA या DCOM का उपयोग कर रहे हों।

  4. "मैंने तर्क सुना है कि REST के साथ आप केवल URL को ब्राउज़र में पॉप कर सकते हैं और डेटा देख सकते हैं।"

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

  5. "हमें प्रत्येक संसाधन के लिए" पठनीय "URL की आवश्यकता क्यों है? यदि हम सेवा को लागू करने के लिए एक उपकरण का उपयोग कर रहे हैं, तो क्या हम वास्तव में वास्तविक URL की परवाह करते हैं?"

    अच्छा वह निर्भर करता है। हमें वेब पर किसी भी संसाधन के लिए पठनीय URL की आवश्यकता क्यों है? आप टिम बर्नर्स-ली के निबंध कूल यूआरआईज़ डोंट चेंज को पढ़ सकते हैं को औचित्य के लिए , लेकिन मूल रूप से, जब तक कि संसाधन भविष्य में उपयोगी हो सकता है, तब तक उस संसाधन के लिए यूआरआई समान रहना चाहिए।

    जाहिर है, क्षणिक संसाधनों के लिए (जैसे निबंध में "आज का पैसा" लिंक) इसके लिए कोई आवश्यकता नहीं है, क्योंकि संबंधित संसाधन चले जाने पर संसाधन को संदर्भित करने की आवश्यकता समाप्त हो जाती है। लेकिन अधिक स्थायी संसाधनों के लिए (जैसे StackOverflow प्रश्न, उदाहरण के लिए, या IMDB पर फिल्में), आप एक ऐसा URL चाहते हैं जो हमेशा के लिए काम करे। जब आप एक वेब सेवा डिजाइन कर रहे हैं, तो आपको यह तय करने की आवश्यकता है कि क्या संसाधन स्वयं आपकी सेवा को रेखांकित कर सकते हैं, और यदि ऐसा है, तो REST शायद जाने का सही तरीका है।

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

एक लंबी कहानी को छोटा करने के लिए: REST और SOAP सिर्फ उपकरण हैं । उनमें से प्रत्येक की ताकत और कमजोरियां हैं। यदि आपके पास एकमात्र उपकरण हथौड़ा है, तो हर समस्या नाखून की तरह दिखती है। इसलिए दोनों टूल को जानें, और उन्हें सही तरीके से उपयोग करना सीखें और फिर प्रत्येक काम के लिए सही टूल चुनें।


11
ध्यान रखें कि SOAP HTTP तक ही सीमित नहीं है, इसलिए अतिरिक्त अमूर्तता है। SOAP शैली मैसेजिंग का उपयोग प्रोटोकॉल की भीड़ पर किया जा सकता है, और REST की तुलना में व्यापक पहुंच है। मुझे लगता है कि यह एक सरल तथ्य है कि कई हार्ड-कोर REST समर्थक कभी-कभी पहचानने में विफल होते हैं। REST का अपना स्थान है, लेकिन ऐसा SOAP करता है।
जिस्टा

4
@ जिरस्ता: अच्छी बात है। ऐसा नहीं है कि SOAP में कुछ गड़बड़ है, ठीक वैसे ही जैसे हथौड़े में कुछ भी गलत नहीं है, जब तक आपकी समस्या सही मायने में कील है। इसके विपरीत, यह सवाल कह रहा है: "मुझे स्क्रूड्राइवर्स से नफरत है! हर किसी के लिए एक हथौड़ा क्यों अच्छा नहीं है? मुझे समझाएं कि स्क्रूड्राइवर्स मौजूद होना चाहिए!" - जो, जब उस संदर्भ में रखा जाता है, तो यह उस गैरबराबरी के लिए प्रकट होता है।
डैनियल प्राइडेन

2
REST एक स्थापत्य शैली है। यदि आप वास्तव में चाहते हैं, तो आप SOAP के साथ रेस्टफुल सेवाएं कर सकते हैं। मुझे लगता है कि मुख्य समुदाय ने SOAP wrt HTTP के खिलाफ REST समुदाय को फटकार लगाई है कि SOAP को लगता है कि HTTP एक ट्रांसपोर्ट प्रोटोकॉल है, जबकि यह एक ट्रांसफर प्रोटोकॉल है।
ब्रूनो

@ डैनियल: ऊपर दिए गए सवाल के बारे में पूरी तरह से सहमत ... भयानक सवाल, और आदर्श के रूप में "व्यक्तिपरक और तर्कपूर्ण" का एक उदाहरण जैसा कि यह मिलता है, और निश्चित रूप से अधिक बेतुका नहीं हो सकता था। : PI, SOAP के बारे में एक भेद कर सकता है ... मुझे लगता है कि यह "हथौड़ा सेना" के बिल को "हथौड़े" से बहुत बेहतर बनाता है। ; पी
जस्टा

3
@ दानिश शीश! किसी को नाराज करने का मतलब नहीं था। यह एक ईमानदार जांच है क्योंकि मुझे नहीं लगता कि REST इन सेवाओं और उनके जैसी सेवाओं के लिए सही दृष्टिकोण है। कृपया पहली नज़र में मेरा प्रश्न न लिखें। मुझे लगता है कि यह ठीक है कि यह "तर्कवादी" है क्योंकि मैं वास्तविकता में हूं, मैं एक तर्क दे रहा हूं। मैं सिर्फ एक खंडन के लिए कह रहा हूँ। यह कहना कि REST "वेब का उपयोग करता है क्योंकि यह काम करने के लिए डिज़ाइन किया गया था," मुझे लगता है कि "मेरे ट्विस्टर्स और फेसबुक से पहले मेरे दिन में वापस आ गया है ..." आपने कोई जानकारी नहीं दी जो बताती है कि REST इन प्रकारों के लिए उपयुक्त क्यों है सेवाओं की। विस्तृत करने के लिए परवाह?
जोश एम।

17

एक ईमानदार सवाल एक ईमानदार जवाब का हकदार है। लेकिन पहले, आपने इस प्रश्न के पाठ का उपयोग किसी अन्य प्रश्न के उत्तर के रूप में क्यों किया अगर आपको नहीं लगता कि यह प्रकृति में अलंकारिक था?

वैसे भी:

  1. " सभी आधुनिक भाषाओं / चौखटों / प्लेटफार्मों के लिए WSDL और आउटपुट प्रॉक्सी क्लासेज और क्लाइंट्स में पढ़ने के लिए उपकरण मौजूद हैं। REST सेवा को लागू करना प्रलेखन को पढ़कर हाथ से किया जाता है। "

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

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

    लेकिन ट्विटर और नेटफ्लिक्स के लिए, कोई सार्वभौमिक समझौता नहीं है कि "अस्तित्व में सभी माइक्रोब्लॉग्स मीडिया टाइप एप्लिकेशन / ट्वीट का उपयोग करेंगे", मुख्य रूप से माइक्रोब्लॉगिंग इतना नया है। शायद कुछ वर्षों में कुछ माइक्रोब्लॉगिंग सेवाएं उसी एपीआई पर बस जाती हैं ताकि ट्विटर, फेसबुक, आइडेंटिका और बीच-बीच में आ सकें। उनके मौजूदा API में से कोई भी कहीं भी Restful के पास नहीं है, हालांकि वे बहुत दावा करते हैं, इसलिए मुझे उम्मीद नहीं है कि यह जल्द ही वास्तविक होगा।

    " इसके अलावा, इन दो सेवाओं को लागू करते समय, आपको" अनुमान "करना होगा कि पाइप में क्या वापस आएगा क्योंकि कोई वास्तविक स्कीमा या संदर्भ दस्तावेज़ नहीं है। "

    तुमने सिर पर कील ठोंकी है। बाकी सब वितरित और हाइपरमीडिया के बारे में है, और यह बहुत अधिक रकम देता है। एक ब्राउज़र यह देखता है कि उसे अनुरोध से क्या मिलता है और वह उपयोगकर्ता को दिखाता है। एक HTML पृष्ठ आमतौर पर बहुत अधिक GET अनुरोधों का उदाहरण देता है, उदाहरण के लिए CSS, स्क्रिप्ट और चित्र। एक छवि आम तौर पर केवल स्क्रीन के लिए प्रदान की जाती है, जावास्क्रिप्ट को निष्पादित किया जाता है, और इसी तरह। हर बार, ब्राउज़र वह करता है जो वह करता है क्योंकि उसे लिंक एक टैग <img>या <style>प्रतिक्रिया मीडिया प्रकार में मिला image/jpegया था text/css

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

  2. " क्यों एक REST सेवा लिखें जो XML को वैसे भी लौटा दे? "

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

    जेनेरिक समस्या डोमेन के लिए मीडिया प्रकारों को डिज़ाइन करना (जैसा कि अमीर पाठ समस्या डोमेन के लिए HTML मीडिया प्रकार में ) बहुत कठिन है। बहुत संकीर्ण समस्या वाले डोमेन के लिए मीडिया प्रकार बनाना शायद बहुत आसान है (एक ट्वीट की तरह)। लेकिन एक्स्टेंसिबिलिटी के लिए डिज़ाइन करना और क्लाइंट्स (और सर्वर) को रिएक्ट करने वाले एलिमेंट्स या डेटा आइटम्स को देखने के लिए कैसे इस्तेमाल किया जाए, यह निर्दिष्ट करना हमेशा एक अच्छा आइडिया होता है। उदाहरण के लिए JPEG में एक एप्लिकेशन-विशिष्ट रिकॉर्ड प्रकार (जैसे APP1) है, जिसका उपयोग सभी प्रकार के मेटा डेटा को करने के लिए किया जाता है।

  3. " मैंने शिकायत सुनी है कि SOAP के साथ आपके पास SOAP लिफाफे का" ओवरहेड "है। इस दिन और उम्र में, क्या हमें वास्तव में मुट्ठी भर बाइट्स के बारे में चिंता करने की ज़रूरत है? "

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

  4. " मैंने तर्क सुना है कि REST के साथ आप केवल URL को ब्राउज़र में पॉप कर सकते हैं और डेटा देख सकते हैं। "

    हाँ, यह भी एक अमान्य तर्क है। यह उस तरह से काम नहीं करता है। यहां तक ​​कि अगर यह काम करता है, तो बाहर के सबसे संकीर्ण REST API ऐसे मीडिया प्रकारों का उपयोग करते हैं जिनके बारे में ब्राउज़र को कोई पता नहीं है और यह अभी भी काम नहीं करेगा।

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

  5. " हमें प्रत्येक संसाधन के लिए" पठनीय "URL की आवश्यकता क्यों है? यदि हम सेवा को लागू करने के लिए एक उपकरण का उपयोग कर रहे हैं, तो क्या हम वास्तव में वास्तविक URL की परवाह करते हैं? "

    यदि आप देखते हैं कि वेब कैसे काम करता है, तो मुझे पूरा यकीन है कि मनुष्य इसके द्वारा और बड़े खुश हैं कि एक विकिपीडिया पृष्ठ के लिए URI इस तरह दिखता है, http://en.wikipedia.org/wiki/Stack_overflowबजाय http://en.wikipedia.org/wiki/?oldid=376349090। लेकिन यह वास्तव में REST के लिए महत्वपूर्ण नहीं है। सही पाने के लिए प्रयास करने के लिए महत्वपूर्ण बात यह है कि यूआरआई में प्रासंगिक डेटा को चुनना है जो बदलने की संभावना नहीं है। आप सोच सकते हैं कि डेटाबेस आईडी कभी नहीं बदलेगी, लेकिन तब क्या होता है जब दो डेटा सेट को विलय करने की आवश्यकता होती है? आपकी सभी प्राथमिक कुंजियाँ बदल जाती हैं। पृष्ठ शीर्षक (Stack_overflow) नहीं बदलेगा।

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

संपादित करें: स्वरूपण


7

मार्टिन फाउलर का रिचर्डसन मैच्योरिटी मॉडल पर एक पोस्ट है जो SOAP और REST के बीच अंतर को समझाते हुए एक बेहतरीन काम करता है।


लेख रेस्ट की व्याख्या करने वाला एक महान काम करता है; लेकिन SOAP का उल्लेख केवल एक बार किया गया है। दोनों के बीच कोई तुलना नहीं की गई है।
jaco0646

3

डब्लूएसडीएल और अन्य दस्तावेज़ स्तर प्रोटोकॉल बेमानी हैं। HTTP प्रोटोकॉल सिर्फ दस्तावेज़ों को प्रस्तुत करने और फ़ॉर्म सबमिट करने के अलावा संचालन के बहुत समृद्ध सेट का समर्थन करता है।

REST के समर्थक उस अतिरेक से असहज हैं।


यह मुझे नहीं बताता कि मुझे इन प्रकार की सेवाओं के लिए REST का उपयोग क्यों करना चाहिए। मेरे लिए, यह सिर्फ "फिट" नहीं है। यह कहना कि "HTTP प्रोटोकॉल सिर्फ दस्तावेजों को प्रस्तुत करने और फॉर्म जमा करने के अलावा बहुत अधिक समृद्ध सेटों का समर्थन करता है" का मतलब यह नहीं है कि अगर वास्तव में कुछ बेहतर मौजूद है तो हमें उनका उपयोग करना चाहिए!
जोश एम।

निहितार्थ यह था कि REST दुबला है। यह प्रोटोकॉल (HTTP) स्तर पर काम करता है।
ई.पू.
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.