programmera.net -> webservice -> normal för utskrift | info@programmera.net |
SOAP 1.1
1. Vad är SOAP? 2. SOAP-meddelandet 3. SOAP-specifikationens huvudområden 4. Exempel på RPC i SOAP 1.1 |
1. Vad är SOAP?
SOAP står för "Simple Object Access Protocol" och är ett protokoll för utbyte av strukturerad information i form av XML. En mer precis definition ges nedan:
Definitionen ovan är tagen från SOAP 1.1 specen.
På denna sida kommer vi främst att diskutera SOAP 1.1, men skillnader mot SOAP 1.2 noteras i vissa fall i texten. SOAP har följande mekanismer:
2. SOAP-meddelandet
Egentligen är ett SOAP-meddelande mycket enkelt, vi tittar på 3 fall: 1. Den enklaste formen av SOAP-meddelande har följande struktur:
2. Eventuellt kan man ha ett SOAP-Header-element också, och då får vi följande utseende:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" >
<soap:Body>
<!-- Här kan du ha din XML -->
</soap:Body>
</soap:Envelope>
3. Om ett SOAP-fel inträffar ska Body-taggen innehålla ett SOAP-Fault-element:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" >
<soap:Header>
<!-- Här kan du ha eventuell metadata -->
</soap:Header>
<soap:Body>
<!-- Här kan du ha din XML -->
</soap:Body>
</soap:Envelope>
Dessa tre fall beskriver SOAP-meddelandets struktur, inga andra element än Hedader och Body får finnas i Envelope-elementet. Har man inte någon SOAP-Header är detta i princip allt man behöver känna till om SOAP. Dessutom är det valfritt att högst upp i meddelandet deklarera meddelandet som XML, vi får då följande utseende:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" >
<soap:Body>
<soap:Fault>
<!-- Detaljer för felet -->
</soap:Fault>
</soap:Body>
</soap:Envelope>
I XML-deklarationen finns två attribut:
<?xml version = '1.0' encoding = 'UTF-8'?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" >
<soap:Body>
<!-- Här kan du ha din XML -->
</soap:Body>
</soap:Envelope>
3. SOAP-specifikationens huvudområden
SOAP-specifikationen har följande huvudområden:
Vi kommer att gå in på vissa av dessa områden senare på sidan. Som du ser handlar mycket av specifikationen om hur man ska underlätta RPC:
4. Exempel på RPC i SOAP 1.1
Nedan ser vi hur metoden "add" anropas med två parametrar:
Och svaret är:
<?xml version = '1.0' encoding = 'UTF-8'?>
<env:Envelope
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ns0="http://www.your_domain.com/ns/Calculator.xsd"
xmlns:ns1="http://www.your_domain.com/axis/services/Calculator">
<env:Body>
<ns0:add env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<addend1 xsi:type="xsd:int">123</addend1>
<addend2 xsi:type="xsd:int">23</addend2>
</ns0:add>
</env:Body>
</env:Envelope>
Ingen av dessa meddelandena har någon SOAP Header, men det är något vi ska titta mer på nu..
<?xml version = '1.0' encoding = 'UTF-8'?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<ns1:addResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:ns1="http://www.your_domain.com/ns/Calculator.xsd">
<addReturn xsi:type="xsd:int">146</addReturn>
</ns1:addResponse>
</soapenv:Body>
</soapenv:Envelope>