एक्सएमएल साबुन
- SOAP का अर्थ है S इम्पल O bject A एक्सेस पी रोटोकॉल
- SOAP एक एप्लीकेशन कम्युनिकेशन प्रोटोकॉल है
- SOAP संदेश भेजने और प्राप्त करने का एक प्रारूप है
- SOAP प्लेटफ़ॉर्म स्वतंत्र है
- SOAP XML पर आधारित है
- SOAP एक W3C अनुशंसा है
साबुन क्यों?
वेब अनुप्रयोगों के लिए इंटरनेट पर संचार करने में सक्षम होना महत्वपूर्ण है।
अनुप्रयोगों के बीच संचार करने का सबसे अच्छा तरीका HTTP है, क्योंकि HTTP सभी इंटरनेट ब्राउज़र और सर्वर द्वारा समर्थित है। इसे पूरा करने के लिए SOAP बनाया गया था।
SOAP विभिन्न तकनीकों और प्रोग्रामिंग भाषाओं के साथ विभिन्न ऑपरेटिंग सिस्टम पर चल रहे अनुप्रयोगों के बीच संवाद करने का एक तरीका प्रदान करता है।
SOAP बिल्डिंग ब्लॉक्स
SOAP संदेश एक साधारण XML दस्तावेज़ है जिसमें निम्नलिखित तत्व होते हैं:
- एक लिफाफा तत्व जो XML दस्तावेज़ को SOAP संदेश के रूप में पहचानता है
- एक शीर्षलेख तत्व जिसमें शीर्षलेख जानकारी होती है
- एक शारीरिक तत्व जिसमें कॉल और प्रतिक्रिया की जानकारी होती है
- त्रुटियों और स्थिति की जानकारी वाला एक दोष तत्व
उपरोक्त सभी तत्व SOAP लिफाफे के लिए डिफ़ॉल्ट नाम स्थान में घोषित किए गए हैं:
http://www.w3.org/2003/05/soap-envelope/
और SOAP एन्कोडिंग और डेटा प्रकारों के लिए डिफ़ॉल्ट नाम स्थान है:
http://www.w3.org/2003/05/soap-encoding
सिंटैक्स नियम
यहाँ कुछ महत्वपूर्ण वाक्य रचना नियम दिए गए हैं:
- एक SOAP संदेश को XML का उपयोग करके एन्कोड किया जाना चाहिए
- SOAP संदेश को SOAP लिफ़ाफ़ा नाम स्थान का उपयोग करना चाहिए
- SOAP संदेश में DTD संदर्भ नहीं होना चाहिए
- SOAP संदेश में XML संसाधन निर्देश नहीं होने चाहिए
कंकाल साबुन संदेश
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Header>
...
</soap:Header>
<soap:Body>
...
<soap:Fault>
...
</soap:Fault>
</soap:Body>
</soap:Envelope>
साबुन लिफाफा तत्व
आवश्यक SOAP लिफाफा तत्व SOAP संदेश का मूल तत्व है। यह तत्व XML दस्तावेज़ को SOAP संदेश के रूप में परिभाषित करता है।
उदाहरण
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
...
Message information goes here
...
</soap:Envelope>
xmlns:साबुन नेमस्पेस
ऊपर दिए गए उदाहरण में xmlns: साबुन नामस्थान पर ध्यान दें। इसका हमेशा यह मान होना चाहिए: "http://www.w3.org/2003/05/soap-envelope/"।
नाम स्थान लिफ़ाफ़े को SOAP लिफ़ाफ़े के रूप में परिभाषित करता है।
यदि एक अलग नाम स्थान का उपयोग किया जाता है, तो एप्लिकेशन एक त्रुटि उत्पन्न करता है और संदेश को त्याग देता है।
एन्कोडिंग शैली विशेषता
एन्कोडिंग स्टाइल विशेषता का उपयोग दस्तावेज़ में उपयोग किए जाने वाले डेटा प्रकारों को परिभाषित करने के लिए किया जाता है। यह विशेषता किसी भी SOAP तत्व पर प्रकट हो सकती है, और तत्व की सामग्री और सभी बाल तत्वों पर लागू होती है।
SOAP संदेश में कोई डिफ़ॉल्ट एन्कोडिंग नहीं होती है।
वाक्य - विन्यास
soap:encodingStyle="URI"
उदाहरण
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
...
Message information goes here
...
</soap:Envelope>
SOAP हैडर एलिमेंट
वैकल्पिक SOAP हैडर तत्व में SOAP संदेश के बारे में एप्लिकेशन-विशिष्ट जानकारी (जैसे प्रमाणीकरण, भुगतान, आदि) शामिल है।
यदि हैडर तत्व मौजूद है, तो यह लिफाफा तत्व का पहला चाइल्ड एलिमेंट होना चाहिए।
नोट: शीर्षलेख तत्व के सभी तत्काल बाल तत्व नामस्थान-योग्य होने चाहिए।
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Header>
<m:Trans xmlns:m="https://www.w3schools.com/transaction/"
soap:mustUnderstand="1">234
</m:Trans>
</soap:Header>
...
...
</soap:Envelope>
ऊपर दिए गए उदाहरण में "ट्रांस" एलिमेंट वाला हेडर, 1 के मान के साथ "मस्टअंडरस्टैंड" विशेषता और 234 का मान शामिल है।
SOAP डिफ़ॉल्ट नाम स्थान में तीन विशेषताओं को परिभाषित करता है। ये विशेषताएँ हैं: मस्टअंडरस्टैंड, अभिनेता और एन्कोडिंग स्टाइल।
SOAP हैडर में परिभाषित विशेषताएँ परिभाषित करती हैं कि प्राप्तकर्ता को SOAP संदेश को कैसे संसाधित करना चाहिए।
गुण को समझना चाहिए
SOAP मस्टअंडरस्टैंड विशेषता का उपयोग यह इंगित करने के लिए किया जा सकता है कि प्राप्तकर्ता को संसाधित करने के लिए हेडर प्रविष्टि अनिवार्य या वैकल्पिक है या नहीं।
यदि आप हैडर एलिमेंट के चाइल्ड एलिमेंट में मस्टअंडरस्टैंड = "1" जोड़ते हैं तो यह इंगित करता है कि हेडर को प्रोसेस करने वाले रिसीवर को एलिमेंट को पहचानना होगा। यदि रिसीवर तत्व को नहीं पहचानता है, तो हेडर को संसाधित करते समय यह विफल हो जाएगा।
वाक्य - विन्यास
soap:mustUnderstand="0|1"
उदाहरण
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Header>
<m:Trans xmlns:m="https://www.w3schools.com/transaction/"
soap:mustUnderstand="1">234
</m:Trans>
</soap:Header>
...
...
</soap:Envelope>
अभिनेता विशेषता
एक SOAP संदेश संदेश पथ के साथ विभिन्न समापन बिंदुओं को पार करके एक प्रेषक से एक रिसीवर तक जा सकता है। हालाँकि, SOAP संदेश के सभी भाग अंतिम समापन बिंदु के लिए अभिप्रेत नहीं हो सकते हैं, इसके बजाय, यह संदेश पथ पर एक या अधिक समापन बिंदुओं के लिए अभिप्रेत हो सकता है।
SOAP अभिनेता विशेषता का उपयोग हैडर तत्व को एक विशिष्ट समापन बिंदु पर संबोधित करने के लिए किया जाता है।
वाक्य - विन्यास
soap:actor="URI"
उदाहरण
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Header>
<m:Trans xmlns:m="https://www.w3schools.com/transaction/"
soap:actor="https://www.w3schools.com/code/">234
</m:Trans>
</soap:Header>
...
...
</soap:Envelope>
एन्कोडिंग शैली विशेषता
एन्कोडिंग स्टाइल विशेषता का उपयोग दस्तावेज़ में उपयोग किए जाने वाले डेटा प्रकारों को परिभाषित करने के लिए किया जाता है। यह विशेषता किसी भी SOAP तत्व पर दिखाई दे सकती है, और यह उस तत्व की सामग्री और सभी चाइल्ड तत्वों पर लागू होगी।
SOAP संदेश में कोई डिफ़ॉल्ट एन्कोडिंग नहीं होती है।
वाक्य - विन्यास
soap:encodingStyle="URI"
साबुन शरीर तत्व
आवश्यक SOAP बॉडी तत्व में संदेश के अंतिम समापन बिंदु के लिए लक्षित वास्तविक SOAP संदेश होता है।
SOAP बॉडी तत्व के तत्काल बाल तत्व नामस्थान-योग्य हो सकते हैं।
उदाहरण
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Body>
<m:GetPrice xmlns:m="https://www.w3schools.com/prices">
<m:Item>Apples</m:Item>
</m:GetPrice>
</soap:Body>
</soap:Envelope>
ऊपर दिया गया उदाहरण सेब की कीमत का अनुरोध करता है। ध्यान दें कि m:GetPrice और उपरोक्त आइटम तत्व एप्लिकेशन-विशिष्ट तत्व हैं। वे SOAP नामस्थान का हिस्सा नहीं हैं।
एक SOAP प्रतिक्रिया कुछ इस तरह दिख सकती है:
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Body>
<m:GetPriceResponse xmlns:m="https://www.w3schools.com/prices">
<m:Price>1.90</m:Price>
</m:GetPriceResponse>
</soap:Body>
</soap:Envelope>
साबुन दोष तत्व
वैकल्पिक SOAP दोष तत्व का उपयोग त्रुटि संदेशों को इंगित करने के लिए किया जाता है।
SOAP दोष तत्व SOAP संदेश के लिए त्रुटियाँ और स्थिति की जानकारी रखता है।
यदि कोई दोष तत्व मौजूद है, तो उसे शरीर तत्व के बाल तत्व के रूप में प्रकट होना चाहिए। एक SOAP संदेश में एक दोष तत्व केवल एक बार दिखाई दे सकता है।
SOAP दोष तत्व में निम्नलिखित उप तत्व हैं:
Sub Element | Description |
---|---|
<faultcode> | A code for identifying the fault |
<faultstring> | A human readable explanation of the fault |
<faultactor> | Information about who caused the fault to happen |
<detail> |
Holds application specific error information related to the Body element |
SOAP दोष कोड
दोषों का वर्णन करते समय नीचे परिभाषित फॉल्टकोड मानों का उपयोग फॉल्टकोड तत्व में किया जाना चाहिए:
Error | Description |
---|---|
VersionMismatch | Found an invalid namespace for the SOAP Envelope element |
MustUnderstand | An immediate child element of the Header element, with the mustUnderstand attribute set to "1", was not understood |
Client | The message was incorrectly formed or contained incorrect information |
Server | There was a problem with the server so the message could not proceed |
HTTP प्रोटोकॉल
HTTP टीसीपी/आईपी पर संचार करता है। एक HTTP क्लाइंट TCP का उपयोग करके एक HTTP सर्वर से जुड़ता है। कनेक्शन स्थापित करने के बाद, क्लाइंट सर्वर को एक HTTP अनुरोध संदेश भेज सकता है:
POST /item HTTP/1.1
Host: 189.123.255.239
Content-Type: text/plain
Content-Length: 200
सर्वर तब अनुरोध को संसाधित करता है और क्लाइंट को एक HTTP प्रतिक्रिया वापस भेजता है। प्रतिक्रिया में एक स्थिति कोड होता है जो अनुरोध की स्थिति को इंगित करता है:
200 OK
Content-Type: text/plain
Content-Length: 200
ऊपर के उदाहरण में, सर्वर ने 200 का स्थिति कोड लौटाया। यह HTTP के लिए मानक सफलता कोड है।
अगर सर्वर अनुरोध को डीकोड नहीं कर सका, तो वह कुछ इस तरह वापस कर सकता था:
400 Bad Request
Content-Length: 0
साबुन बंधन
SOAP विनिर्देश SOAP संदेशों की संरचना को परिभाषित करता है, न कि उनका आदान-प्रदान कैसे किया जाता है। इस अंतर को "SOAP बाइंडिंग" कहा जाता है। SOAP बाइंडिंग ऐसे तंत्र हैं जो परिवहन प्रोटोकॉल का उपयोग करके SOAP संदेशों को प्रभावी ढंग से आदान-प्रदान करने की अनुमति देते हैं।
अधिकांश SOAP कार्यान्वयन सामान्य परिवहन प्रोटोकॉल, जैसे HTTP या SMTP के लिए बाइंडिंग प्रदान करते हैं।
HTTP तुल्यकालिक और व्यापक रूप से उपयोग किया जाता है। एक SOAP HTTP अनुरोध कम से कम दो HTTP शीर्षलेख निर्दिष्ट करता है: सामग्री-प्रकार और सामग्री-लंबाई।
SMTP अतुल्यकालिक है और अंतिम उपाय या विशेष मामलों में उपयोग किया जाता है।
SOAP के जावा कार्यान्वयन आमतौर पर JMS (जावा मैसेजिंग सिस्टम) प्रोटोकॉल के लिए एक विशिष्ट बाइंडिंग प्रदान करते हैं।
सामग्री प्रकार
SOAP अनुरोध और प्रतिक्रिया के लिए सामग्री-प्रकार शीर्षलेख संदेश के लिए MIME प्रकार और अनुरोध या प्रतिक्रिया के XML निकाय के लिए उपयोग किए जाने वाले वर्ण एन्कोडिंग (वैकल्पिक) को परिभाषित करता है।
वाक्य - विन्यास
Content-Type: MIMEType; charset=character-encoding
उदाहरण
POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
कंटेंट की लम्बाई
SOAP अनुरोध और प्रतिक्रिया के लिए सामग्री-लंबाई शीर्षलेख अनुरोध या प्रतिक्रिया के मुख्य भाग में बाइट्स की संख्या निर्दिष्ट करता है।
वाक्य - विन्यास
Content-Length: bytes
उदाहरण
POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 250
एक साबुन उदाहरण
नीचे दिए गए उदाहरण में, एक सर्वर को GetStockPrice अनुरोध भेजा जाता है। अनुरोध में स्टॉकनाम पैरामीटर और मूल्य पैरामीटर है जो प्रतिक्रिया में वापस किया जाएगा। फ़ंक्शन के लिए नाम स्थान "http://www.example.org/stock" में परिभाषित किया गया है।
एक साबुन अनुरोध:
POST /InStock HTTP/1.1
Host: www.example.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Body xmlns:m="http://www.example.org/stock">
<m:GetStockPrice>
<m:StockName>IBM</m:StockName>
</m:GetStockPrice>
</soap:Body>
</soap:Envelope>
SOAP प्रतिक्रिया:
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding">
<soap:Body xmlns:m="http://www.example.org/stock">
<m:GetStockPriceResponse>
<m:Price>34.5</m:Price>
</m:GetStockPriceResponse>
</soap:Body>
</soap:Envelope>