XML seep
- SOAP staan vir S imple O bject A ccess P rotocol
- SOAP is 'n toepassingskommunikasieprotokol
- SOAP is 'n formaat om boodskappe te stuur en te ontvang
- SOAP is platform onafhanklik
- SOAP is gebaseer op XML
- SOAP is 'n W3C-aanbeveling
Hoekom SEEP?
Dit is belangrik dat webtoepassings oor die internet kan kommunikeer.
Die beste manier om tussen toepassings te kommunikeer is oor HTTP, want HTTP word deur alle internetblaaiers en bedieners ondersteun. SOAP is geskep om dit te bereik.
SOAP bied 'n manier om te kommunikeer tussen toepassings wat op verskillende bedryfstelsels loop, met verskillende tegnologieë en programmeertale.
SEEP Boublokke
'n SOAP-boodskap is 'n gewone XML-dokument wat die volgende elemente bevat:
- 'n Koevertelement wat die XML-dokument as 'n SOAP-boodskap identifiseer
- 'n Kop-element wat kop-inligting bevat
- 'n Liggaamselement wat oproep- en reaksie-inligting bevat
- 'n Foutelement wat foute en statusinligting bevat
Al die elemente hierbo word verklaar in die verstek naamruimte vir die SOAP koevert:
http://www.w3.org/2003/05/soap-envelope/
en die verstek naamruimte vir SOAP-kodering en datatipes is:
http://www.w3.org/2003/05/soap-encoding
Sintaksisreëls
Hier is 'n paar belangrike sintaksisreëls:
- 'n SEEP-boodskap MOET met XML geënkodeer word
- 'n SOAP-boodskap MOET die SOAP Envelope-naamruimte gebruik
- 'N SEEP-boodskap mag NIE 'n DTD-verwysing bevat nie
- 'n SOAP-boodskap mag NIE XML-verwerkingsinstruksies bevat nie
Skelet SOAP Boodskap
<?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>
Die SEEP Koevert Element
Die vereiste SOAP Envelope-element is die wortelelement van 'n SOAP-boodskap. Hierdie element definieer die XML-dokument as 'n SOAP-boodskap.
Voorbeeld
<?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>
Die xmlns:soap Naamruimte
Let op die xmlns:soap naamruimte in die voorbeeld hierbo. Dit moet altyd die waarde hê van: "http://www.w3.org/2003/05/soap-envelope/".
Die naamruimte definieer die koevert as 'n SOAP-koevert.
As 'n ander naamspasie gebruik word, genereer die toepassing 'n fout en gooi die boodskap weg.
Die enkoderingstyl-kenmerk
Die encodingStyle-kenmerk word gebruik om die datatipes wat in die dokument gebruik word, te definieer. Hierdie kenmerk kan op enige SOAP-element verskyn, en is van toepassing op die element se inhoud en alle kinderelemente.
'n SOAP-boodskap het geen verstekkodering nie.
Sintaksis
soap:encodingStyle="URI"
Voorbeeld
<?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>
Die SOAP Header Element
Die opsionele SOAP Header-element bevat toepassingspesifieke inligting (soos verifikasie, betaling, ens.) oor die SOAP-boodskap.
As die Header element teenwoordig is, moet dit die eerste kind element van die Envelope element wees.
Let wel: Alle onmiddellike kinderelemente van die Header-element moet naamruimte-gekwalifiseer wees.
<?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>
Die voorbeeld hierbo bevat 'n kopskrif met 'n "Trans"-element, 'n "mustUnderstand"-kenmerk met 'n waarde van 1 en 'n waarde van 234.
SOAP definieer drie eienskappe in die verstek naamruimte. Hierdie kenmerke is: moet verstaan, akteur en encodingStyle.
Die eienskappe wat in die SOAP Header gedefinieer word, definieer hoe 'n ontvanger die SOAP-boodskap moet verwerk.
Die mustUnstand-kenmerk
Die SOAP mustUnderstand-kenmerk kan gebruik word om aan te dui of 'n kopinskrywing verpligtend of opsioneel is vir die ontvanger om te verwerk.
As jy mustUnderstand="1" by 'n onderliggende element van die Header-element voeg, dui dit aan dat die ontvanger wat die Header verwerk, die element moet herken. As die ontvanger nie die element herken nie, sal dit misluk wanneer die Kopskrif verwerk word.
Sintaksis
soap:mustUnderstand="0|1"
Voorbeeld
<?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>
Die akteur Kenmerk
'n SOAP-boodskap kan van 'n sender na 'n ontvanger beweeg deur verskillende eindpunte langs die boodskappad te laat verbygaan. Maar nie alle dele van 'n SOAP-boodskap is bedoel vir die uiteindelike eindpunt nie, maar dit kan eerder vir een of meer van die eindpunte op die boodskappad bedoel wees.
Die SOAP-akteur-kenmerk word gebruik om die Header-element na 'n spesifieke eindpunt te adresseer.
Sintaksis
soap:actor="URI"
Voorbeeld
<?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>
Die enkoderingstyl-kenmerk
Die encodingStyle-kenmerk word gebruik om die datatipes wat in die dokument gebruik word, te definieer. Hierdie kenmerk kan op enige SOAP-element verskyn, en dit sal van toepassing wees op daardie element se inhoud en alle kinderelemente.
'n SOAP-boodskap het geen verstekkodering nie.
Sintaksis
soap:encodingStyle="URI"
Die SOAP Body Element
Die vereiste SOAP Body element bevat die werklike SOAP boodskap wat bedoel is vir die uiteindelike eindpunt van die boodskap.
Onmiddellike kinderelemente van die SOAP Body element kan naamruimte-gekwalifiseer wees.
Voorbeeld
<?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>
Die voorbeeld hierbo vra die prys van appels. Let daarop dat die m:GetPrice en die Item-elemente hierbo toepassingspesifieke elemente is. Hulle is nie deel van die SOAP-naamruimte nie.
'n SOAP-reaksie kan iets soos volg lyk:
<?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>
Die SOAP Fout Element
Die opsionele SOAP Fault-element word gebruik om foutboodskappe aan te dui.
Die SOAP Fault-element bevat foute en statusinligting vir 'n SOAP-boodskap.
As 'n foutelement teenwoordig is, moet dit as 'n onderliggende element van die liggaamselement verskyn. 'n Foutelement kan slegs een keer in 'n SOAP-boodskap verskyn.
Die SOAP Fault-element het die volgende sub-elemente:
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 Foutkodes
Die foutkodewaardes wat hieronder gedefinieer word, moet in die foutkode-element gebruik word wanneer foute beskryf word:
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 |
Die HTTP-protokol
HTTP kommunikeer oor TCP/IP. 'n HTTP-kliënt koppel aan 'n HTTP-bediener met behulp van TCP. Nadat 'n verbinding tot stand gebring is, kan die kliënt 'n HTTP-versoekboodskap na die bediener stuur:
POST /item HTTP/1.1
Host: 189.123.255.239
Content-Type: text/plain
Content-Length: 200
Die bediener verwerk dan die versoek en stuur 'n HTTP-antwoord terug na die kliënt. Die antwoord bevat 'n statuskode wat die status van die versoek aandui:
200 OK
Content-Type: text/plain
Content-Length: 200
In die voorbeeld hierbo het die bediener 'n statuskode van 200 teruggestuur. Dit is die standaard sukseskode vir HTTP.
As die bediener nie die versoek kon dekodeer nie, kon dit iets soos volg teruggestuur het:
400 Bad Request
Content-Length: 0
SEEP Binding
Die SOAP-spesifikasie definieer die struktuur van die SOAP-boodskappe, nie hoe dit uitgeruil word nie. Hierdie gaping word gevul deur wat genoem word "SOAP Bindings". SOAP-bindings is meganismes wat toelaat dat SOAP-boodskappe effektief uitgeruil word deur 'n vervoerprotokol te gebruik.
Die meeste SOAP-implementerings verskaf bindings vir algemene vervoerprotokolle, soos HTTP of SMTP.
HTTP is sinchronies en word wyd gebruik. 'n SOAP HTTP-versoek spesifiseer ten minste twee HTTP-opskrifte: inhoud-tipe en inhoud-lengte.
SMTP is asynchronies en word in laaste uitweg of spesifieke gevalle gebruik.
Java-implementerings van SOAP verskaf gewoonlik 'n spesifieke binding vir die JMS (Java Messaging System) protokol.
Inhoud-tipe
Die inhoudtipe-opskrif vir 'n SOAP-versoek en -antwoord definieer die MIME-tipe vir die boodskap en die karakterkodering (opsioneel) wat gebruik word vir die XML-liggaam van die versoek of antwoord.
Sintaksis
Content-Type: MIMEType; charset=character-encoding
Voorbeeld
POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Inhoud-lengte
Die inhoud-lengte-kopskrif vir 'n SOAP-versoek en -antwoord spesifiseer die aantal grepe in die liggaam van die versoek of antwoord.
Sintaksis
Content-Length: bytes
Voorbeeld
POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 250
'n SEEP Voorbeeld
In die voorbeeld hieronder word 'n GetStockPrice-versoek na 'n bediener gestuur. Die versoek het 'n Voorraadnaam-parameter en 'n Prys-parameter wat in die antwoord teruggestuur sal word. Die naamruimte vir die funksie word gedefinieer in "http://www.example.org/stock".
'n SEEP-versoek:
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>
Die SOAP-reaksie:
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>