दस्तावेज़ शैली और RPC शैली संचार के बीच अंतर क्या है?


92

क्या कोई मुझे दस्तावेज़ और आरपीसी स्टाइल वेबसर्विस के बीच के अंतर को समझा सकता है? JAX-RPC के अलावा, अगला संस्करण JAX-WS है, जो दस्तावेज़ और RPC दोनों शैलियों का समर्थन करता है। मैं यह भी समझता हूं कि दस्तावेज़ शैली वेब सेवा अतुल्यकालिक संचार के लिए हैं, जहां एक ग्राहक प्रतिक्रिया प्राप्त होने तक ब्लॉक नहीं करेगा।

किसी भी तरह से, JAX-WS का उपयोग करके मैं वर्तमान में @ वेब सेवा के साथ सेवा को एनोटेट करता हूं , WSDL उत्पन्न करता हूं और उस WSDL से मैं क्लाइंट साइड कलाकृतियों को उत्पन्न करता हूं।

एक बार कलाकृतियों को प्राप्त करने के बाद, दोनों शैलियों में, मैं पोर्ट पर विधि लागू करता हूं। अब, यह RPC शैली और दस्तावेज़ शैली में भिन्न नहीं है। तो क्या अंतर है और वह अंतर कहां दिखाई दे रहा है?

इसी तरह, HTTP पर किस तरह से HTTP पर एसओएपी XML से अधिक HTTP पर अलग है? आखिर SOAP भी SOAP नामस्थान के साथ XML दस्तावेज है।


जवाबों:


97

क्या कुछ बॉडी मुझे एक डॉक्यूमेंट स्टाइल और RPC स्टाइल वेबसर्विस के बीच के अंतर के बारे में समझा सकती है?

दो संचार शैली के मॉडल हैं जो WSDL बाइंडिंग को SOAP संदेश बॉडी में अनुवाद करने के लिए उपयोग किए जाते हैं। वे हैं: दस्तावेज़ और आरपीसी

डॉक्यूमेंट स्टाइल मॉडल का उपयोग करने का लाभ यह है कि आप SOAP बॉडी को किसी भी तरह से स्ट्रक्चर कर सकते हैं, जब तक आप यह चाहते हैं कि SOAP मैसेज बॉडी का कंटेंट किसी भी तरह का एक्सएमएल इंस्टेंस हो। दस्तावेज़ शैली को संदेश-उन्मुख शैली भी कहा जाता है ।

हालाँकि, RPC शैली मॉडल के साथ , SOAP अनुरोध निकाय की संरचना में ऑपरेशन नाम और विधि पैरामीटर दोनों सेट होने चाहिए। RPC शैली मॉडल संदेश निकाय में निहित XML उदाहरण के लिए एक विशिष्ट संरचना मानता है ।

इसके अलावा, दो एन्कोडिंग उपयोग मॉडल हैं जो WSDL बाइंडिंग को SOAP संदेश में अनुवाद करने के लिए उपयोग किए जाते हैं। वे हैं: शाब्दिक, और एन्कोडेड

एक का उपयोग करते समय शाब्दिक उपयोग मॉडल , शरीर सामग्री उपयोगकर्ता परिभाषित के अनुरूप होना चाहिए , XML- स्कीमा (XSD) संरचना । फायदा दो गुना है। एक के लिए, आप उपयोगकर्ता द्वारा परिभाषित XML-स्कीमा के साथ संदेश निकाय को मान्य कर सकते हैं, इसके अलावा, आप XSLT जैसी परिवर्तनकारी भाषा का उपयोग करके भी संदेश को बदल सकते हैं।

SO (SOAP) एन्कोडेड उपयोग मॉडल के साथ , संदेश को XSD डेटाटिप्स का उपयोग करना होता है, लेकिन संदेश की संरचना को किसी भी उपयोगकर्ता-निर्धारित XML स्कीमा के अनुरूप नहीं होना चाहिए। इससे संदेश निकाय को मान्य करना या संदेश निकाय पर XSLT आधारित परिवर्तनों का उपयोग करना मुश्किल हो जाता है।

विभिन्न शैली और उपयोग मॉडल का संयोजन हमें WSDL बाइंडिंग को SOAP संदेश में अनुवाद करने के लिए चार अलग-अलग तरीके देता है।

Document/literal
Document/encoded
RPC/literal
RPC/encoded

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

एक बार कलाकृतियों को प्राप्त करने के बाद, मैं संचार की दोनों शैलियों में, पोर्ट पर विधि लागू करता हूं। अब, यह RPC शैली और दस्तावेज़ शैली में भिन्न नहीं है। तो क्या अंतर है और वह अंतर कहां दिखाई दे रहा है?

जिस स्थान पर आप अंतर पा सकते हैं वह "RESPONSE" है!

RPC शैली:

package com.sample;

import java.util.ArrayList;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;

@WebService
@SOAPBinding(style=Style.RPC)
public interface StockPrice { 

    public String getStockPrice(String stockName); 

    public ArrayList getStockPriceList(ArrayList stockNameList); 
}

दूसरे ऑपरेशन के लिए SOAP संदेश में खाली आउटपुट होगा और ऐसा दिखेगा:

RPC स्टाइल रिस्पांस:

<ns2:getStockPriceListResponse 
       xmlns:ns2="http://sample.com/">
    <return/>
</ns2:getStockPriceListResponse>
</S:Body>
</S:Envelope>

दस्तावेज़ शैली:

package com.sample;

import java.util.ArrayList;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;

@WebService
@SOAPBinding(style=Style.DOCUMENT)
public interface StockPrice {

    public String getStockPrice(String stockName);

    public ArrayList getStockPriceList(ArrayList stockNameList);
}

यदि हम उपरोक्त SEI के लिए क्लाइंट चलाते हैं, तो आउटपुट है:

123 [123, 456]

यह आउटपुट दिखाता है कि ArrayList तत्वों का वेब सेवा और क्लाइंट के बीच आदान-प्रदान हो रहा है। यह परिवर्तन केवल SOAPBinding एनोटेशन की शैली विशेषता को बदलकर किया गया है। अमीर डेटा प्रकार के साथ दूसरी विधि के लिए SOAP संदेश संदर्भ के लिए नीचे दिखाया गया है:

दस्तावेज़ शैली प्रतिक्रिया:

<ns2:getStockPriceListResponse 
       xmlns:ns2="http://sample.com/">
<return xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        xsi:type="xs:string">123</return>
<return xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        xsi:type="xs:string">456</return>
</ns2:getStockPriceListResponse>
</S:Body>
</S:Envelope>

निष्कर्ष

  • जैसा कि आपने दो SOAP प्रतिक्रिया संदेशों में देखा होगा कि DOCUMENT शैली के मामले में SOAP प्रतिक्रिया संदेश को मान्य करना संभव है, लेकिन RPC शैली वेब सेवाओं में नहीं।
  • RPC शैली का उपयोग करने का मूल नुकसान यह है कि यह अमीर डेटा प्रकारों का समर्थन नहीं करता है और दस्तावेज़ शैली का उपयोग करने का यह है कि यह अमीर डेटा प्रकारों को परिभाषित करने के लिए XSD के रूप में कुछ जटिलता लाता है।
  • इनमें से एक का उपयोग करने का विकल्प ऑपरेशन / विधि की आवश्यकताओं और अपेक्षित ग्राहकों पर निर्भर करता है।

इसी तरह, HTTP पर एसओएपी किस तरह से एक्सएमएल पर HTTP से अलग है? आखिर SOAP भी SOAP नामस्थान के साथ XML दस्तावेज है। तो यहाँ क्या अंतर है?

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

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

  • सेवा का नाम
  • सेवा द्वारा कार्यान्वित विधि के नाम
  • प्रत्येक विधि का विधि हस्ताक्षर
  • सेवा कार्यान्वयन का पता (URI के रूप में व्यक्त)

SOAP का उपयोग मौजूदा सॉफ्टवेयर घटक को वेब सेवा के रूप में उजागर करने के लिए प्रक्रिया को सुव्यवस्थित करता है क्योंकि सेवा के विधि हस्ताक्षर अनुरोध और प्रतिक्रिया दोनों के लिए उपयोग किए जाने वाले XML दस्तावेज़ संरचना की पहचान करते हैं।


"मुझे WSDL की किस शैली का उपयोग करना चाहिए?" के लिए विशेष धन्यवाद। लेख लिंक।
Boolean_Type

23

एक RPC शैली वेब सेवा किसी विधि के कॉल स्टैक का प्रतिनिधित्व करने वाले XML संरचनाओं को उत्पन्न करने के लिए विधि और उसके मापदंडों के नामों का उपयोग करती है। दस्तावेज़ शैली इंगित करती है SOAP निकाय में XML दस्तावेज़ होता है जिसे पूर्व-परिभाषित XML स्कीमा दस्तावेज़ के विरुद्ध मान्य किया जा सकता है।

एक अच्छा प्रारंभिक बिंदु: SOAP बाइंडिंग: दस्तावेज़ और RPC स्टाइल वेब सेवाओं के बीच अंतर


20

डब्ल्यूएसडीएल परिभाषा में, बाइंडिंग में ऑपरेशन होते हैं, यहां प्रत्येक ऑपरेशन के लिए शैली आती है।

दस्तावेज़: WSDL फ़ाइल में, यह उन विवरणों को निर्दिष्ट करता है जिनके पास इनलाइन है या XSD दस्तावेज़ आयात करता है, जो उन डेटा विधियों के संरचना (यानी स्कीमा) का वर्णन करता है जो उन सेवा विधियों द्वारा एक्सचेंज किए जा रहे हैं जो शिथिल युग्मित करते हैं। दस्तावेज़ शैली डिफ़ॉल्ट है।

  • लाभ :
    • इस दस्तावेज़ शैली का उपयोग करके, हम पूर्वनिर्धारित स्कीमा के खिलाफ SOAP संदेशों को मान्य कर सकते हैं। यह xml डेटाटिप्स और पैटर्न का समर्थन करता है।
    • आजादी से मिलना।
  • नुकसान : इसे समझना थोड़ा कठिन है।

WSDL में तत्व निम्नानुसार दिखता है:

<types>
 <xsd:schema>
  <xsd:import schemaLocation="http://localhost:9999/ws/hello?xsd=1" namespace="http://ws.peter.com/"/>
 </xsd:schema>
</types>

स्कीमा बाहरी संदर्भ से आयात कर रहा है।

RPC : WSDL फ़ाइल में, यह प्रकार स्कीमा नहीं बनाता है, संदेश तत्वों के भीतर यह नाम और प्रकार की विशेषताओं को परिभाषित करता है जो कसकर युग्मित बनाता है।

<types/>  
<message name="getHelloWorldAsString">  
<part name="arg0" type="xsd:string"/>  
</message>  
<message name="getHelloWorldAsStringResponse">  
<part name="return" type="xsd:string"/>  
</message>  
  • फायदा : समझने में आसान।
  • नुकसान :
    • हम SOAP संदेशों को मान्य नहीं कर सकते हैं।
    • कसकर जुड़े हुए

RPC: WSDL
दस्तावेज़ में कोई प्रकार नहीं : प्रकार अनुभाग WSDL में उपलब्ध होगा


सिर्फ वही दोहराया है जो संदर्भ में है। इस व्याख्या से मुझे अंतर समझने में मदद नहीं मिली।
किंन्ट

1
यह निश्चित रूप से एक संदर्भ या प्रलेखन से नहीं है - व्याकरण की गलतियों से भरा हुआ
विशेष

7

मुख्य परिदृश्य जहां JAX-WS RPC और दस्तावेज़ शैली निम्नानुसार उपयोग की जाती है:

  • दूरस्थ प्रक्रिया कॉल (RPC) पैटर्न जब उपभोक्ता एक भी तार्किक आवेदन या समझाया डेटा के साथ घटक के रूप में वेब सेवा विचार किया जाता है। प्रक्रिया कॉल के इनपुट और आउटपुट मापदंडों के लिए अनुरोध और प्रतिक्रिया संदेश सीधे मैप करते हैं।

    इस प्रकार के उदाहरण RPC पैटर्न में भुगतान सेवा या स्टॉक उद्धरण सेवा शामिल हो सकती है।

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


3

मुझे लगता है कि आप जो पूछ रहे हैं, वह आरपीसी लिटरल, डॉक्यूमेंट लिटरल और डॉक्यूमेंटेड रैप्ड सोप वेब सेवाओं के बीच अंतर है।

ध्यान दें कि दस्तावेज़ वेब सेवाओं को शाब्दिक रूप से चित्रित किया गया है और साथ ही लपेटा गया है और वे अलग-अलग हैं - प्राथमिक अंतर में से एक यह है कि उत्तरार्द्ध बीपी 1.1 अनुपालन है और पूर्व नहीं है।

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

आरपीसी शाब्दिक बनाम दस्तावेज़ लपेटे जाने के संदर्भ में, डॉक्यूमेंटेड रैप्ड अनुरोध को डब्ल्यूएसडीएल में स्कीमा के खिलाफ आसानी से वीटी / मान्य किया जा सकता है - एक बड़ा फायदा।

मैं सुझाव दूंगा कि इसके फायदे के कारण वेब सेवा के प्रकार के रूप में लिपटा हुआ दस्तावेज़ का उपयोग किया जाए।

HTTP पर SOAP वाहक के रूप में HTTP से बंधा SOAP प्रोटोकॉल है। SOAP SMTP या XXX पर भी हो सकता है। SOAP संस्थाओं (क्लाइंट और सर्वर, उदाहरण के लिए) के बीच बातचीत का एक तरीका प्रदान करता है और दोनों संस्थाएँ प्रोटोकॉल के शब्दार्थ के अनुसार ऑपरेशन तर्क / रिटर्न वैल्यू को मार्शल कर सकती हैं।

यदि आप HTTP (और आप कर सकते हैं) पर XML का उपयोग कर रहे थे, तो बस HTTP अनुरोध / प्रतिक्रिया पर XML पेलोड होना समझा जाता है। आपको मार्शल / अनमरशाल, त्रुटि से निपटने के लिए ढांचा प्रदान करना होगा।

WSDL और जावा पर जोर देने वाले कोड के उदाहरणों के साथ एक विस्तृत ट्यूटोरियल: SOAP और JAX-WS, RPC बनाम दस्तावेज़ वेब सेवाएँ


2

दस्तावेज़
दस्तावेज़ शैली संदेश पूर्वनिर्धारित स्कीमा के विरुद्ध मान्य किए जा सकते हैं। दस्तावेज़ शैली में, SOAP संदेश एकल दस्तावेज़ के रूप में भेजा जाता है। स्कीमा का उदाहरण:

  <types>  
   <xsd:schema> <xsd:import namespace="http://example.com/" 
    schemaLocation="http://localhost:8080/ws/hello?xsd=1"/>  
   </xsd:schema>  
  </types>

दस्तावेज़ शैली साबुन शरीर संदेश का उदाहरण

  <message name="getHelloWorldAsString">   
     <part name="parameters" element="tns:getHelloWorldAsString"/>   
  </message> 
  <message name="getHelloWorldAsStringResponse">  
     <part name="parameters"> element="tns:getHelloWorldAsStringResponse"/>   
  </message>

दस्तावेज़ शैली संदेश शिथिल युग्मित है।

RPC RPC शैली संदेश XML संरचना उत्पन्न करने के लिए विधि नाम और मापदंडों का उपयोग करते हैं। संदेशों को स्कीमा के विरुद्ध मान्य किया जाना मुश्किल है। RPC शैली में, SOAP संदेश कई तत्वों के रूप में भेजा जाता है।

  <message name="getHelloWorldAsString">
    <part name="arg0"> type="xsd:string"/>   
   </message> 
  <message name="getHelloWorldAsStringResponse">   
    <part name="return"
   > type="xsd:string"/>   
  </message>

यहां प्रत्येक पैरामीटर को काफी हद तक निर्दिष्ट किया गया है, आरपीसी शैली संदेश को कसकर युग्मित किया जाता है, आमतौर पर स्थिर होता है, विधि के बदलाव के समय क्लाइंट को परिवर्तनों की आवश्यकता होती है। आरपीसी स्टाइल बहुत ही सरल एक्सएसडी प्रकार जैसे कि स्ट्रिंग और इंटेगर तक सीमित है, और परिणामस्वरूप WSDL नहीं होगा यहां तक ​​कि मापदंडों को परिभाषित और विवश करने के लिए एक प्रकार का खंड है

डिफ़ॉल्ट रूप से शाब्दिक शैली। डेटा को एक स्कीमा के अनुसार क्रमबद्ध किया जाता है, डेटा प्रकार जो संदेशों में निर्दिष्ट नहीं होता है लेकिन स्कीमा (नेमस्पेस) के संदर्भ में साबुन संदेश बनाने के लिए उपयोग किया जाता है।

   <soap:body>
     <myMethod>
        <x>5</x>
        <y>5.0</y>
     </myMethod>
   </soap:body>

प्रत्येक पैरामीटर में निर्दिष्ट एन्कोडेड डेटाटाइप

   <soap:body>
     <myMethod>
         <x xsi:type="xsd:int">5</x>
         <y xsi:type="xsd:float">5.0</y>
     </myMethod>
   </soap:body>

स्कीमा मुफ्त

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