Ultimele tutoriale de dezvoltare web
 

XML Soap


  • SOAP standuri pentru P rotocol Simple Object Access
  • SOAP este un protocol de comunicare aplicație
  • SOAP este un format pentru trimiterea și primirea de mesaje
  • SOAP este independent de platforma
  • SOAP este bazat pe XML
  • SOAP este o recomandare W3C

De ce SOAP?

Este important pentru aplicațiile web pentru a putea comunica prin Internet.

Cel mai bun mod de a comunica între aplicații este de peste HTTP, deoarece HTTP este suportat de toate browserele de Internet și servere. SOAP a fost creat pentru a realiza acest lucru.

SOAP oferă o modalitate de a comunica între aplicațiile care rulează pe diferite sisteme de operare, cu diferite tehnologii si limbaje de programare.


SOAP Blocuri de constructii

Un mesaj SOAP este un document XML obișnuit care conține următoarele elemente:

  • Un element Plic care identifică documentul XML ca un mesaj SOAP
  • Un element de antet care conține informații de antet
  • Un element de corp care conține informații de apel și de răspuns
  • Un element defect care conține erori și informații de stare

Toate elementele de mai sus sunt declarate în spațiul de nume implicit pentru plicul SOAP:

http://www.w3.org/2003/05/soap-envelope/

și spațiul de nume implicit pentru codarea SOAP și tipuri de date este:

http://www.w3.org/2003/05/soap-encoding


Reguli de sintaxă

Iată câteva reguli importante de sintaxă:

  • Un mesaj SOAP trebuie să fie codificat folosind XML
  • Un mesaj SOAP trebuie să utilizeze spațiul de nume SOAP Envelope
  • Un mesaj SOAP trebuie să utilizeze spațiul de nume SOAP Codare
  • Un mesaj SOAP nu trebuie să conțină o referință DTD
  • Un mesaj SOAP nu trebuie să conțină instrucțiuni de prelucrare XML

Scheletul SOAP mesaj

<?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>

Plic Element SOAP

Necesară Elementul SOAP Envelope este elementul rădăcină al unui mesaj SOAP. Acest element definește documentul XML ca un mesaj SOAP.

Exemplu

<?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: săpun Namespace

Observați xmlns: spațiul de nume de săpun, în exemplul de mai sus. Acesta ar trebui să aibă întotdeauna valoarea: "http://www.w3.org/2003/05/soap-envelope/" .

Spațiul de nume definește Plicul ca un plic SOAP.

Dacă se utilizează un spațiu de nume diferit, aplicația generează o eroare și aruncate înapoi mesajul.


encodingStyle Atributul

encodingStyle atribut este utilizat pentru a defini tipurile de date utilizate în document. Acest atribut poate apărea pe orice element SOAP, și se aplică conținutul elementului și toate elementele de copil.

Un mesaj SOAP nu are nici o codificare implicită.

Sintaxă

soap:encodingStyle=" Exemplu
<?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>

Elementul Antetul SOAP

Elementul SOAP Header opțional conține informații specifice aplicației (like authentication, payment, etc) cu privire la mesajul SOAP.

În cazul în care elementul de antet este prezent, acesta trebuie să fie primul element copil al elementului plicului.

Note: Toate elementele copil imediate ale elementului antet trebuie să fie calificat-spațiu de nume.

<?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="http://www.w3ii.com/transaction/"
  soap:mustUnderstand="1">234
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

Exemplul de mai sus conține un antet cu un "Trans" elementul, un "mustUnderstand" atribut cu o valoare de 1, și o valoare de 234.

SOAP definește trei atribute în spațiul de nume implicit. Aceste atribute sunt: ​​mustUnderstand, actor, și encodingStyle.

Atributele definite în SOAP antet definește modul în care un destinatar ar trebui să proceseze mesajul SOAP.


mustUnderstand Atributul

Atributul SOAP mustUnderstand poate fi utilizat pentru a indica dacă o intrare antet este obligatorie sau opțională pentru destinatar pentru a procesa.

Dacă adăugați mustUnderstand = „1“ la un element copil al elementului de antet indică faptul că receptorul de prelucrare antet trebuie să recunoască elementul. În cazul în care receptorul nu recunoaște elementul va eșua atunci când procesarea antet.

Sintaxă

soap:mustUnderstand="0|1"

Exemplu

<?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="http://www.w3ii.com/transaction/"
  soap:mustUnderstand="1">234
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

actor Atributul

Un mesaj SOAP poate călători de la un expeditor la un receptor care trece prin diferite puncte finale de-a lungul traseului mesajului. Cu toate acestea, nu toate părțile componente ale unui mesaj SOAP pot fi destinate pentru obiectivul final, în schimb, acesta poate fi destinate uneia sau mai multora dintre punctele finale pe calea mesajului.

Atributul SOAP actor este utilizat pentru a aborda elementul antet pentru un anumit efect.

Sintaxă

soap:actor=" Exemplu
<?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="http://www.w3ii.com/transaction/"
  soap:actor="http://www.w3ii.com/appml/">234
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

encodingStyle Atributul

encodingStyle atribut este utilizat pentru a defini tipurile de date utilizate în document. Acest atribut poate apărea pe orice element SOAP, și se va aplica la conținutul acestui element și toate elementele de copil.

Un mesaj SOAP nu are nici o codificare implicită.

Sintaxă

soap:encodingStyle=" Elementul de corp Săpunul

Elementul SOAP necesară Organismul conține mesajul SOAP real destinat pentru obiectivul final al mesajului.

Elementele copil imediate ale elementului SOAP organism poate fi calificat-spațiu de nume.

Exemplu

<?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="http://www.w3ii.com/prices">
    <m:Item>Apples</m:Item>
  </m:GetPrice>
</soap:Body>

</soap:Envelope>

Exemplul de mai sus solicită prețul de mere. Rețineți că m: GetPrice și elementele de elemente de mai sus sunt elemente specifice aplicației. Ele nu sunt o parte din spațiul de nume SOAP.

Un răspuns SOAP ar putea arata ceva de genul:

<?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="http://www.w3ii.com/prices">
    <m:Price>1.90</m:Price>
  </m:GetPriceResponse>
</soap:Body>

</soap:Envelope>


Elementul Fault SOAP

Elementul SOAP defect opțional este utilizat pentru a indica mesaje de eroare.

Elementul SOAP defect are erori și starea de informații pentru un mesaj SOAP.

Dacă un element de defect este prezent, acesta trebuie să apară ca un element secundar al elementului de corp. Un element defect poate apărea o singură dată într-un mesaj SOAP.

Elementul SOAP defect are următoarele elemente sub:

Sub Element Descriere
<faultcode> Un cod de identificare a defectului
<faultstring> O explicație poate fi citit de om anomaliei
<faultactor> Informații despre care a provocat vina să se întâmple
<detail>

Susține aplicație specifică informații eroare cu privire la elementul de corp

Codurile de eroare SOAP

Valorile faultcode definite mai jos trebuie utilizat în elementul faultcode atunci când descrie defecte:

Eroare Descriere
VersionMismatch S-au găsit un spațiu de nume nevalid pentru elementul SOAP Envelope
MustUnderstand Un element copil imediat al elementului antet, cu mustUnderstand atributul setat la "1" , nu a fost înțeleasă
Client Mesajul a fost format incorect sau conținea informații incorecte
Server A apărut o problemă cu serverul, astfel încât mesajul nu a putut continua

Protocolul HTTP

HTTP comunica prin TCP / IP. Un client HTTP se conectează la un server HTTP folosind TCP. După stabilirea unei conexiuni, clientul poate trimite un mesaj de solicitare HTTP către serverul:

POST /item HTTP/1.1
Host: 189.123.255.239
Content-Type: text/plain
Content-Length: 200

Serverul apoi procesează cererea și trimite un răspuns HTTP înapoi la client. Răspunsul conține un cod de stare care indică starea solicitării:

200 OK
Content-Type: text/plain
Content-Length: 200

În exemplul de mai sus, serverul a returnat un cod de stare 200. Acesta este codul standard de succes pentru HTTP.

Dacă serverul nu a putut decoda cererea, aceasta ar putea avea ceva de genul asta a revenit:

400 Bad Request
Content-Length: 0

SOAP legare

Specificația SOAP definește structura mesajelor SOAP, nu modul în care acestea sunt schimbate. Acest decalaj este umplut de ceea ce se numește "SOAP Bindings" . legăturile SOAP sunt mecanisme care permit mesaje SOAP să fie schimbate în mod eficient folosind un protocol de transport.

Cele mai multe implementări SOAP furnizează legături pentru protocoale de transport comune, cum ar fi HTTP sau SMTP.

HTTP este sincron și utilizat pe scară largă. O cerere SOAP HTTP specifică cel puțin două antete HTTP: Content-Type și Content-Length.

SMTP este asincron și este utilizat în ultimă instanță sau cazuri particulare.

Implementări Java SOAP oferă , de obicei , o legare pentru JMS specifice (Java Messaging System) protocolul.


Tipul de conținut

Content-Type antet pentru o solicitare SOAP și răspuns definește tipul MIME pentru mesajul și codificarea caracterelor (optional) utilizat pentru corpul XML al cererii sau a răspunsului.

Sintaxă

Content-Type: MIMEType; charset=character-encoding

Exemplu

POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8

Content-Length

Antetul Content-Length pentru o cerere SOAP și răspuns specifică numărul de octeți în corpul cererii sau a răspunsului.

Sintaxă

Content-Length: bytes

Exemplu

POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 250

Un Exemplu SOAP

In exemplul de mai jos, o cerere GetStockPrice este trimis la un server. Cererea are un parametru StockName, și un parametru de preț, care vor fi returnate în răspunsul. Spațiul de nume pentru funcția este definită în "http://www.example.org/stock" .

O cerere SOAP:

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>

Răspunsul 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>