2010-01-13 16 views
6

पर नाम मूल्य जोड़े के लाभ मैं एनपीपी या एसओएपी/डब्ल्यूएसडीएल का उपयोग करके अपनी सेवाओं को कॉल करने की पेशकश करते हुए पेपैल आदि जैसे एपीआई देखता हूं। पारंपरिक वेब सेवाओं (डब्ल्यूसीएफ) का उपयोग करते हुए .NET पर्यावरण (3.5) का उपयोग करते समय बेहतर और क्यों? मुझे पता है कि डब्लूएसडीएल आपको एपीआई यूआरएल में छोड़ देता है और यह आपके लिए रैपर उत्पन्न करता है। तो फिर कंपनियां एनवीपी क्यों पेश करती हैं?एसओएपी/डब्ल्यूएसडीएल

उत्तर

23

वहाँ कभी न खत्म होने जा करने के लिए भ्रम की स्थिति लगती है इस उद्योग में विभिन्न प्रकार की वेब सेवाओं के बारे में।

SOAP संदेश प्रोटोकॉल है। आरईएसटी के साथ यह काफी आम है क्योंकि एक सेब लॉन ट्रैक्टर के साथ है। मैसेजिंग प्रोटोकॉल में आप जो कुछ चीजें चाहते हैं वे हैं:

  • शीर्षलेख और अन्य गैर-सामग्री "विशेषताएं।"
  • को संबोधित करते - अलग सर्वर/हेडर के आधार पर प्राप्तकर्ताओं को संदेश भेजने के मार्ग;
  • कतार और अन्य तरीकों के माध्यम से
  • गारंटी वितरण;
  • एन्क्रिप्शन, पर हस्ताक्षर, और अन्य सुरक्षा सुविधाओं,
  • लेनदेन और orchestrations; ।। किसी एक संदेश में जटिल संरचित डेटा की
  • सही प्रतिनिधित्व;

... और इतने पर यह सूची अंतिम नहीं है क्या डबल्यूएसडीएल सोप करने के लिए कहते हैं, मुख्य रूप से, यह है:

  • खोजे जाने एक अनुबंध के माध्यम से, मशीन पठनीय "प्रलेखन" है कि उपभोक्ताओं को वास्तव में क्या करने के लिए एक संदेश भेजने के लिए आवश्यक है बताता है और प्रॉक्सी स्वत: जनरेट होने की अनुमति देता का एक रूप;

  • संदेश की सख्त, स्वचालित स्कीमा सत्यापन, उसी तरह एक्सएसडी एक्सएमएल के लिए काम करता है।

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

पेपैल का एनवीपी एपीआई आरईएसटी नहीं है। यह उन विकल्पों के लिए HTTP POST पर एक वैकल्पिक, आरपीसी-जैसे मैसेजिंग प्रोटोकॉल है जो समर्थन नहीं करता है या SOAP का समर्थन करने में कठिनाई नहीं करता है। यह मेरी राय नहीं है, यह तथ्य का बयान है। एनवीपी में से एक क्षेत्र वास्तव में METHOD है। यह स्पष्ट रूप से आरपीसी शब्दकोष है। UpdateRecurringPaymentsProfile के लिए अपने एपीआई पर एक नज़र डालें और मुझे यह बताने की कोशिश करें कि यह "संसाधन" के रूप में वर्णन करने के लिए समझ का चाटना बनाता है। यह संसाधन नहीं है, यह ऑपरेशन है।

पेपैल के मामले में विशेष रूप से, "एनवीपी" (HTTP POST) एपीआई लगभग हर तरह से एसओएपी एपीआई से कम है। यह उन उपभोक्ताओं के लिए है जो SOAP का उपयोग नहीं कर सकते हैं। यदि आप इसका उपयोग कर सकते हैं, तो आप निश्चित रूप से चाहिए।

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

Twitter API कहने के लिए इसकी तुलना करें। यह एक असली आरईएसटी सेवा है। इस एपीआई पर आप जो भी "ऑपरेशन" कर सकते हैं, उसे सटीक रूप से किसी विशेष प्रकार के संसाधन की पुनर्प्राप्ति या जमा करने के रूप में वर्णित किया गया है। एक संसाधन एक ट्वीट, एक स्थिति, एक उपयोगकर्ता है।इस मामले में यह सचमुच एक जटिल सोप एपीआई का उपयोग करने क्योंकि तुम सच में नहीं संदेश भेजने, आप प्रदर्शन नहीं कर रहे लेनदेन, आप न केवल विशिष्ट बातें के लिए पूछ रहे हैं, और इन बातें कर रहे हैं कोई मतलब नहीं है एक यूआरएल के साथ वर्णित किया जा सकता है। केवल अंतर यह है कि एक HTML वेब पेज वापस पाने के बजाय, आपको कुछ एक्सएमएल या जेएसओएन डेटा मिल रहा है; जिस तरह से आप अनुरोध करते हैं वही वही है।

एक आरईएसटी वेब सेवा आमतौर पर (हमेशा?) कुछ संसाधनों की पुनर्प्राप्ति के लिए HTTP GET का उपयोग करती है। और ट्विटर बिल्कुल यह करता है। GET अभी भी "नाम-मूल्य जोड़े" का उपयोग करता है - यह क्वेरी स्ट्रिंग है, ?q=twitterapi&show_user=true? के बाद उन बिट्स नाम-मूल्य जोड़े हैं। और यहां एक शानदार उदाहरण है कि आप एसओएपी पर आरईएसटी का उपयोग क्यों करना चाहते हैं; आप इसे एक आरएसएस फ़ीड पर लगा सकते हैं और स्ट्रीमिंग अपडेट प्राप्त कर सकते हैं। मैं इसे फ़ायरफ़ॉक्स में लाइव बुकमार्क में बदल सकता हूं। या मैं इसे JSON प्रारूप में डाउनलोड कर सकता हूं और इसे jqGrid की तरह कुछ जोड़ सकता हूं। दिलचस्प बात यह नहीं है कि अनुरोध "नाम-मूल्य जोड़े" का उपयोग करता है; दिलचस्प बात यह है कि यह एक साधारण यूआरएल है और किसी भी चीज से उपभोग किया जा सकता है जो जानता है कि वेब पेज का अनुरोध कैसे करें।

  • एक REST API का उपयोग करें (यदि उपलब्ध हो) जब आप डेटा का पर्दाफाश, या का उपयोग करने या इसे प्रकाशित करना चाहते:

    तो इस तरह से कोशिश करते हैं और मैं क्या कहा है के सभी को संक्षेप में प्रस्तुत करने के लिए, यह के बारे में सोच एक स्थायी संसाधन के रूप में।

  • सिस्टम एसओएपी एपीआई का उपयोग करें जब सिस्टम प्रकृति में लेनदेन हो और/या जब आपको जटिल सुविधाओं की आवश्यकता हो, जो जटिल संदेश प्रोटोकॉल ऑफ़र कर सकते हैं, जैसे कि आरएम और एड्रेसिंग।

  • कोई एसपीएपी एपीआई या जब आप एसओएपी एपीआई का उपयोग करने में असमर्थ होते हैं तो एक आरपीसी एपीआई (जिसमें केवल HTTP पोस्ट के आसपास पूरी तरह से मॉडलिंग किया गया है) के बारे में शामिल है।

आशा है कि भ्रम की स्थिति से कुछ ऊपर साफ करता है।

+0

के लिए भी अतुल्यकालिक हैं अच्छी व्याख्या/विस्तार - आईएमओ आपकी जगह पर। –

+0

अच्छा, बहुत बहुत धन्यवाद! – PositiveGuy

0

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

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

यहाँ बाकी के लाभ में से कुछ हैं:

  • बाकी अधिक हल्के है
  • मानव पठनीय परिणाम
  • सब कुछ एक URI पता संसाधन
  • बाकी सेवाओं को और अधिक आसानी से कैश नहीं किया जाता है
  • आरईएसटी बनाना आसान है (कोई टूलकिट आवश्यक नहीं है)
  • आरईएसटी कॉल करना आसान है (HTTP - प्राप्त करें, पोस्ट करें, पुट करें, हटाएं)
+0

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

+0

द्वारा बदलें सबसे पहले, फेसबुक अपने एपीआई में बड़े ब्रेकिंग बदलाव करने की संभावना नहीं है। दूसरा, आपको अधिक लचीला रैपर लिखना चाहिए (देखें: बिंग एपीआई का उपयोग करके यह कोड उदाहरण - http://msdn.microsoft.com/en-us/library/dd251093.aspx) –

+0

इस संदर्भ में नाम मूल्य जोड़े सभी को डालने का संदर्भ है पोस्ट पैरामीटर में अपने पैरामीटर का, (मूल रूप से) 'NAME1 = VALUE1 और NAME2 = VALUE2' जैसे यूआरएल-एन्कोडेड, और एक एपीआई यूआरएल को स्ट्रिंग एन्कोडेड पोस्ट करना। दुर्भाग्यवश, आरईएसटी से संबंधित नहीं है। –

0

NVP HTTP POST है

name=fred 
amount=100 
code=403 

आदि

यह किसी भी HTML ब्राउज़र तो यह एक वेब सेवा

को डाटा भेजने के लिए लागू करने के लिए आसान है से डिफ़ॉल्ट स्वरूप है मुझे नहीं लगता कि यह वेब सेवा से डेटा प्राप्त करने के लिए एक अच्छा प्रारूप है? JSON या XML अधिक उपयुक्त होगा

नहीं हर कोई VisualStudio उपयोग करता है, या स्वचालित आवरण जनरेटर की पहुंच है, या इस तरह के एक जानवर का उपयोग करना चाहता

कई वेब मैशप जावास्क्रिप्ट में कोडित रहे हैं, ताकि HTTP POST का उपयोग कर डेटा भेजने के लिए सबसे आसान तरीका है। वापसी परिणाम एक मानक HTML जवाब कोड (200, 403, 500, आदि) और/या कुछ JSON

कई सेवा प्रदाताओं कई एपीआई सभी ग्राहकों के लिए पूरा करने के लिए प्रदान करते हैं