SOAP - Szybki przewodnik
SOAP to akronim od Simple Object Access Protocol. Jest to protokół przesyłania wiadomości oparty na języku XML, służący do wymiany informacji między komputerami. SOAP jest aplikacją specyfikacji XML.
Zwraca uwagę
SOAP to protokół komunikacyjny przeznaczony do komunikacji przez Internet.
SOAP może rozszerzyć protokół HTTP do przesyłania komunikatów XML.
SOAP zapewnia transport danych dla usług internetowych.
SOAP może wymieniać kompletne dokumenty lub wywołać zdalną procedurę.
SOAP może służyć do nadawania wiadomości.
SOAP jest niezależny od platformy i języka.
SOAP jest sposobem XML do definiowania, jakie informacje są wysyłane iw jaki sposób.
SOAP umożliwia aplikacjom klienckim łatwe łączenie się z usługami zdalnymi i wywoływanie metod zdalnych.
Chociaż protokół SOAP może być używany w różnych systemach przesyłania wiadomości i może być dostarczany za pośrednictwem różnych protokołów transportowych, początkowo SOAP koncentruje się na zdalnych wywołaniach procedur przesyłanych za pośrednictwem protokołu HTTP.
Inne struktury, w tym CORBA, DCOM i Java RMI, zapewniają podobną funkcjonalność do SOAP, ale komunikaty SOAP są napisane w całości w języku XML i dlatego są wyjątkowo niezależne od platformy i języka.
Wiadomość SOAP to zwykły dokument XML zawierający następujące elementy -
Envelope- określa początek i koniec wiadomości. Jest to element obowiązkowy.
Header- zawiera wszelkie opcjonalne atrybuty wiadomości wykorzystywane do przetwarzania wiadomości w punkcie pośrednim lub w ostatecznym punkcie końcowym. Jest to element opcjonalny.
Body- zawiera dane XML składające się na wysyłaną wiadomość. Jest to element obowiązkowy.
Fault - Opcjonalny element Fault, który zawiera informacje o błędach, które wystąpiły podczas przetwarzania wiadomości.
Wszystkie te elementy są zadeklarowane w domyślnej przestrzeni nazw dla koperty SOAP - http://www.w3.org/2001/12/soap-envelope a domyślna przestrzeń nazw dla kodowania SOAP i typów danych to - http://www.w3.org/2001/12/soap-encoding
NOTE- Wszystkie te specyfikacje mogą ulec zmianie. Dlatego aktualizuj się, korzystając z najnowszych specyfikacji dostępnych na stronie W3.
Struktura wiadomości SOAP
Poniższy blok przedstawia ogólną strukturę wiadomości SOAP -
<?xml version = "1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">
<SOAP-ENV:Header>
...
...
</SOAP-ENV:Header>
<SOAP-ENV:Body>
...
...
<SOAP-ENV:Fault>
...
...
</SOAP-ENV:Fault>
...
</SOAP-ENV:Body>
</SOAP_ENV:Envelope>
Koperta SOAP wskazuje początek i koniec wiadomości, dzięki czemu odbiorca wie, kiedy cała wiadomość została odebrana. Koperta SOAP rozwiązuje problem z informacją, kiedy otrzymałeś wiadomość i jesteś gotowy do jej przetworzenia. Dlatego koperta SOAP jest w zasadzie mechanizmem pakowania.
Zwraca uwagę
Każda wiadomość SOAP ma główny element Envelope.
Koperta jest obowiązkową częścią wiadomości SOAP.
Każdy element Envelope musi zawierać dokładnie jeden element Body.
Jeśli Envelope zawiera element Header, nie może zawierać więcej niż jeden i musi pojawić się jako pierwsze dziecko Envelope przed Body.
Koperta zmienia się, gdy zmieniają się wersje SOAP.
Koperta SOAP jest określana za pomocą prefiksu przestrzeni nazw ENV i elementu Envelope.
Opcjonalne kodowanie SOAP jest również określane przy użyciu nazwy przestrzeni nazw i opcjonalnego elementu encodingStyle , który może również wskazywać na styl kodowania inny niż SOAP.
Procesor SOAP zgodny z wersją 1.1 generuje błąd po odebraniu komunikatu zawierającego przestrzeń nazw kopert w wersji 1.2.
Procesor SOAP zgodny z wersją 1.2 generuje błąd VersionMismatch, jeśli otrzyma komunikat, który nie zawiera przestrzeni nazw kopert w wersji 1.2.
Komunikat SOAP zgodny z wersją 1.2
Poniżej podano przykład komunikatu SOAP zgodnego z wersją 1.2.
<?xml version = "1.0"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
SOAP-ENV:encodingStyle = " http://www.w3.org/2001/12/soap-encoding">
...
Message information goes here
...
</SOAP-ENV:Envelope>
SOAP z HTTP POST
Poniższy przykład ilustruje użycie komunikatu SOAP w ramach operacji HTTP POST, która wysyła komunikat do serwera. Pokazuje przestrzenie nazw dla definicji schematu koperty i dla definicji schematu reguł kodowania. OrderEntry odniesienia w nagłówku HTTP to nazwa programu, który ma być wywoływany na stronie tutorialspoint.com.
POST /OrderEntry HTTP/1.1
Host: www.tutorialspoint.com
Content-Type: application/soap; charset = "utf-8"
Content-Length: nnnn
<?xml version = "1.0"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
SOAP-ENV:encodingStyle = " http://www.w3.org/2001/12/soap-encoding">
...
Message information goes here
...
</SOAP-ENV:Envelope>
NOTE - Powiązanie HTTP określa lokalizację usługi.
Opcjonalny element Header oferuje elastyczną strukturę do określania dodatkowych wymagań na poziomie aplikacji. Na przykład elementu Header można użyć do określenia podpisu cyfrowego dla usług chronionych hasłem. Podobnie można go użyć do określenia numeru konta dla płatnych usług SOAP.
Zwraca uwagę
Jest to opcjonalna część wiadomości SOAP.
Elementy nagłówka mogą występować wielokrotnie.
Nagłówki mają na celu dodanie nowych funkcji i funkcjonalności.
Nagłówek SOAP zawiera wpisy nagłówka zdefiniowane w przestrzeni nazw.
Nagłówek jest kodowany jako pierwszy bezpośredni element podrzędny koperty SOAP.
Gdy zdefiniowano wiele nagłówków, wszystkie bezpośrednie elementy podrzędne nagłówka SOAP są interpretowane jako bloki nagłówka SOAP.
Atrybuty nagłówka SOAP
Nagłówek SOAP może mieć następujące dwa atrybuty -
Atrybut aktora
Protokół SOAP definiuje ścieżkę wiadomości jako listę węzłów usług SOAP. Każdy z tych węzłów pośrednich może wykonać pewne przetwarzanie, a następnie przekazać wiadomość do następnego węzła w łańcuchu. Ustawiając atrybut Actor, klient może określić odbiorcę nagłówka SOAP.
Atrybut MustUnderstand
Wskazuje, czy element Header jest opcjonalny, czy obowiązkowy. Jeśli ma wartość true, odbiorca musi zrozumieć i przetworzyć atrybut Header zgodnie ze zdefiniowaną semantyką lub zwrócić błąd.
Poniższy przykład pokazuje, jak używać nagłówka w komunikacie SOAP.
<?xml version = "1.0"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV = " http://www.w3.org/2001/12/soap-envelope"
SOAP-ENV:encodingStyle = " http://www.w3.org/2001/12/soap-encoding">
<SOAP-ENV:Header>
<t:Transaction
xmlns:t = "http://www.tutorialspoint.com/transaction/"
SOAP-ENV:mustUnderstand = "true">5
</t:Transaction>
</SOAP-ENV:Header>
...
...
</SOAP-ENV:Envelope>
Treść SOAP jest obowiązkowym elementem zawierającym zdefiniowane przez aplikację dane XML wymieniane w komunikacie SOAP. Treść musi znajdować się w kopercie i musi następować po wszelkich nagłówkach, które mogą być zdefiniowane dla wiadomości.
Treść jest zdefiniowana jako element podrzędny koperty, a semantyka treści jest zdefiniowana w skojarzonym schemacie SOAP.
Treść zawiera obowiązkowe informacje przeznaczone dla ostatecznego odbiorcy wiadomości. Na przykład -
<?xml version = "1.0"?>
<SOAP-ENV:Envelope>
........
<SOAP-ENV:Body>
<m:GetQuotation xmlns:m = "http://www.tp.com/Quotation">
<m:Item>Computers</m:Item>
</m:GetQuotation>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Powyższy przykład wymaga wyceny zestawów komputerowych. Zwróć uwagę, że m: GetQuotation i powyższe elementy Item są elementami specyficznymi dla aplikacji. Nie są częścią standardu SOAP.
Oto odpowiedź na powyższe zapytanie -
<?xml version = "1.0"?>
<SOAP-ENV:Envelope>
........
<SOAP-ENV:Body>
<m:GetQuotationResponse xmlns:m = "http://www.tp.com/Quotation">
<m:Quotation>This is Qutation</m:Quotation>
</m:GetQuotationResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Zwykle aplikacja definiuje również schemat zawierający semantykę skojarzoną z elementami żądania i odpowiedzi.
Cennik usługi mogą być realizowane z wykorzystaniem EJB działa w serwerze aplikacji; jeśli tak, to procesor SOAP byłby odpowiedzialny za odwzorowanie informacji o treści jako parametrów do iz implementacji EJB usługi GetQuotationResponse . Procesor SOAP może również mapować informacje o treści na obiekt .NET, obiekt CORBA, program w języku COBOL i tak dalej.
Jeśli podczas przetwarzania wystąpi błąd, odpowiedzią na komunikat SOAP jest element błędu protokołu SOAP w treści komunikatu, a błąd jest zwracany do nadawcy komunikatu SOAP.
Mechanizm błędu SOAP zwraca określone informacje o błędzie, w tym predefiniowany kod, opis i adres procesora SOAP, który wygenerował błąd.
Zwraca uwagę
Komunikat SOAP może zawierać tylko jeden blok błędu.
Błąd jest opcjonalną częścią komunikatu SOAP.
W przypadku powiązania HTTP pomyślna odpowiedź jest łączona z zakresem kodów stanu od 200 do 299.
Błąd protokołu SOAP jest powiązany z zakresem kodów stanu od 500 do 599.
Podelementy błędu
Błąd SOAP ma następujące elementy podrzędne -
Sr.No | Element podrzędny i opis |
---|---|
1 | <faultCode> Jest to kod tekstowy używany do wskazania klasy błędów. W następnej tabeli znajduje się lista wstępnie zdefiniowanych kodów usterek. |
2 | <faultString> Jest to wiadomość tekstowa wyjaśniająca błąd. |
3 | <faultActor> Jest to ciąg tekstowy wskazujący, kto spowodował błąd. Jest to przydatne, jeśli komunikat SOAP przechodzi przez kilka węzłów w ścieżce komunikatów SOAP, a klient musi wiedzieć, który węzeł spowodował błąd. Węzeł, który nie działa jako ostateczne miejsce docelowe, musi zawierać element faultActor . |
4 | <detail> Jest to element służący do przenoszenia komunikatów o błędach specyficznych dla aplikacji. Element szczegółu może zawierać elementy potomne zwane wpisami szczegółowymi. |
Kody błędów SOAP
Zdefiniowane poniżej wartości faultCode muszą być używane w elemencie faultcode podczas opisywania błędów.
Sr.No | Błąd i opis |
---|---|
1 | SOAP-ENV:VersionMismatch Znaleziono nieprawidłową przestrzeń nazw dla elementu SOAP Envelope. |
2 | SOAP-ENV:MustUnderstand Bezpośredni element potomny elementu Header z atrybutem mustUnderstand ustawionym na „1” nie został zrozumiany. |
3 | SOAP-ENV:Client Wiadomość została nieprawidłowo sformułowana lub zawierała nieprawidłowe informacje. |
4 | SOAP-ENV:Server Wystąpił problem z serwerem, więc wiadomość nie może być kontynuowana. |
Przykład błędu SOAP
Poniższy kod to przykładowy błąd. Klient zażądał metody o nazwie ValidateCreditCard , ale usługa nie obsługuje takiej metody. To reprezentuje błąd żądania klienta, a serwer zwraca następującą odpowiedź SOAP -
<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV = "http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi = "http://www.w3.org/1999/XMLSchema-instance"
xmlns:xsd = "http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode xsi:type = "xsd:string">SOAP-ENV:Client</faultcode>
<faultstring xsi:type = "xsd:string">
Failed to locate method (ValidateCreditCard) in class (examplesCreditCard) at
/usr/local/ActivePerl-5.6/lib/site_perl/5.6.0/SOAP/Lite.pm line 1555.
</faultstring>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
SOAP zawiera wbudowany zestaw reguł kodowania typów danych. Umożliwia komunikatowi SOAP wskazanie określonych typów danych, takich jak liczby całkowite, zmiennoprzecinkowe, podwójne lub tablice.
Typy danych SOAP są podzielone na dwie szerokie kategorie - typy skalarne i typy złożone.
Typy skalarne zawierają dokładnie jedną wartość, na przykład nazwisko, cenę lub opis produktu.
Typy złożone zawierają wiele wartości, takich jak zamówienie zakupu lub lista notowań giełdowych.
Typy złożone są dalej dzielone na tablice i struktury.
Styl kodowania komunikatu SOAP jest ustawiany za pomocą atrybutu SOAP-ENV: encodingStyle .
Aby użyć kodowania SOAP 1.1, użyj wartości http://schemas.xmlsoap.org/soap/encoding/
Aby użyć kodowania SOAP 1.2, użyj wartości http://www.w3.org/2001/12/soap-encoding
Najnowsza specyfikacja SOAP przyjmuje wszystkie wbudowane typy zdefiniowane przez schemat XML. Mimo to SOAP zachowuje własną konwencję definiowania konstrukcji, które nie są ustandaryzowane przez schemat XML, takich jak tablice i odwołania.
Typy skalarne
W przypadku typów skalarnych protokół SOAP przyjmuje wszystkie wbudowane typy proste określone w specyfikacji schematu XML. Obejmuje to łańcuchy, liczby zmiennoprzecinkowe, liczby podwójne i liczby całkowite.
W poniższej tabeli wymieniono główne typy proste, zaczerpnięte z części 0 schematu XML - elementarz http://www.w3.org/TR/2000/WD-xmlschema-0-20000407/
Proste typy wbudowane w schemat XML | ||
---|---|---|
Prosty typ | Przykład (y) | |
strunowy | Potwierdź, że to elektryczne. | |
boolean | prawda, fałsz, 1, 0. | |
pływak | -INF, -1E4, -0, 0, 12,78E-2, 12, INF, NaN. | |
podwójnie | -INF, -1E4, -0, 0, 12,78E-2, 12, INF, NaN. | |
dziesiętny | -1,23, 0, 123,4, 1000,00. | |
dwójkowy | 100010 | |
liczba całkowita | -126789, -1, 0, 1, 126789. | |
nonPositiveInteger | -126789, -1, 0. | |
NegativeInteger | -126789, -1. | |
długo | -1, 12678967543233 | |
int | -1, 126789675 | |
krótki | -1, 12678 | |
bajt | -1, 126 | |
nonNegativeInteger | 0, 1, 126789 | |
unsignedLong | 0, 12678967543233 | |
unsignedInt | 0, 1267896754 | |
unsignedShort | 0, 12678 | |
unsignedByte | 0, 126 | |
Dodatnia liczba całkowita | 1, 126789. | |
data | 1999-05-31, --- 05. | |
czas | 13: 20: 00.000, 13: 20: 00.000-05: 00 |
Na przykład tutaj jest odpowiedź SOAP z podwójnym typem danych -
<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<ns1:getPriceResponse
xmlns:ns1 = "urn:examples:priceservice"
SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">
<return xsi:type = "xsd:double">54.99</return>
</ns1:getPriceResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Typy złożone
Tablice SOAP mają bardzo specyficzny zestaw reguł, które wymagają określenia zarówno typu elementu, jak i rozmiaru tablicy. SOAP obsługuje również tablice wielowymiarowe, ale nie wszystkie implementacje SOAP obsługują funkcje wielowymiarowe.
Aby utworzyć tablicę, musisz określić ją jako typ tablicy xsi:. Tablica musi również zawierać atrybut arrayType . Atrybut ten jest wymagany do określenia typu danych dla zawartych elementów i wymiaru (-ów) tablicy.
Na przykład następujący atrybut określa tablicę 10 podwójnych wartości -
arrayType = "xsd:double[10]"
Natomiast następujący atrybut określa dwuwymiarową tablicę ciągów -
arrayType = "xsd:string[5,5]"
Oto przykładowa odpowiedź SOAP z tablicą podwójnych wartości -
<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<ns1:getPriceListResponse
xmlns:ns1 = "urn:examples:pricelistservice"
SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">
<return xmlns:ns2 = "http://www.w3.org/2001/09/soap-encoding"
xsi:type = "ns2:Array" ns2:arrayType = "xsd:double[2]">
<item xsi:type = "xsd:double">54.99</item>
<item xsi:type = "xsd:double">19.99</item>
</return>
</ns1:getPriceListResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Struktury zawierają wiele wartości, ale każdy element jest określony za pomocą unikatowego elementu dostępu. Weźmy na przykład pod uwagę pozycję w katalogu produktów. W takim przypadku struktura może zawierać kod SKU produktu, nazwę produktu, opis i cenę. Oto jak taka struktura byłaby reprezentowana w wiadomości SOAP -
<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<ns1:getProductResponse
xmlns:ns1 = "urn:examples:productservice"
SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">
<return xmlns:ns2 = "urn:examples" xsi:type = "ns2:product">
<name xsi:type = "xsd:string">Red Hat Linux</name>
<price xsi:type = "xsd:double">54.99</price>
<description xsi:type = "xsd:string">
Red Hat Linux Operating System
</description>
<SKU xsi:type = "xsd:string">A358185</SKU>
</return>
</ns1:getProductResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
NOTE- Zadbaj o odpowiednie wcięcia podczas pisania kodu SOAP. Każdy element w strukturze jest określony za pomocą unikatowej nazwy akcesorium. Na przykład powyższy komunikat zawiera cztery elementy akcesory - nazwę, cenę, opis i SKU. Każdy element może mieć własny typ danych. Na przykład nazwa jest podawana jako ciąg znaków, a cena jako podwójna.
SOAP nie jest powiązany z żadnym protokołem transportowym. SOAP może być przesyłany przez SMTP, FTP, IBM MQSeries lub Microsoft Message Queuing (MSMQ).
Specyfikacja SOAP zawiera szczegóły dotyczące tylko protokołu HTTP. Najpopularniejszym protokołem transportowym SOAP pozostaje HTTP.
SOAP przez HTTP
Całkiem logicznie rzecz biorąc, żądania SOAP są wysyłane za pośrednictwem żądania HTTP, a odpowiedzi SOAP są zwracane w treści odpowiedzi HTTP. Chociaż żądania SOAP mogą być wysyłane za pośrednictwem protokołu HTTP GET, specyfikacja zawiera szczegóły dotyczące tylko protokołu HTTP POST.
Ponadto zarówno żądania, jak i odpowiedzi HTTP są wymagane, aby ustawić typ zawartości na tekst / xml.
Specyfikacja SOAP wymaga od klienta dostarczenia nagłówka SOAPAction, ale rzeczywista wartość nagłówka SOAPAction zależy od implementacji serwera SOAP.
Na przykład, aby uzyskać dostęp do usługi tłumaczenia AltaVista BabelFish, hostowanej przez XMethods, musisz określić następujące elementy jako nagłówek SOAPAction.
urn:xmethodsBabelFish#BabelFish
Nawet jeśli serwer nie wymaga pełnego nagłówka SOAPAction, klient musi określić pusty ciąg („”) lub wartość null. Na przykład -
SOAPAction: ""
SOAPAction:
Oto przykładowe żądanie wysłane przez HTTP do usługi XMethods Babelfish Translation -
POST /perl/soaplite.cgi HTTP/1.0
Host: services.xmethods.com
Content-Type: text/xml; charset = utf-8
Content-Length: 538
SOAPAction: "urn:xmethodsBabelFish#BabelFish"
<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV = "http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi = "http://www.w3.org/1999/XMLSchema-instance"
xmlns:xsd = "http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<ns1:BabelFish
xmlns:ns1 = "urn:xmethodsBabelFish"
SOAP-ENV:encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/">
<translationmode xsi:type = "xsd:string">en_fr</translationmode>
<sourcedata xsi:type = "xsd:string">Hello, world!</sourcedata>
</ns1:BabelFish>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Zwróć uwagę na typ zawartości i nagłówek SOAPAction. Należy również zauważyć, że metoda BabelFish wymaga dwóch parametrów typu String. Tryb tłumaczenia en_fr tłumaczy z angielskiego na francuski.
Oto odpowiedź od XMethods -
HTTP/1.1 200 OK
Date: Sat, 09 Jun 2001 15:01:55 GMT
Server: Apache/1.3.14 (Unix) tomcat/1.0 PHP/4.0.1pl2
SOAPServer: SOAP::Lite/Perl/0.50
Cache-Control: s-maxage = 60, proxy-revalidate
Content-Length: 539
Content-Type: text/xml
<?xml version = "1.0" encoding = "UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENC = "http://schemas.xmlsoap.org/soap/encoding/"
SOAP-ENV:encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi = "http://www.w3.org/1999/XMLSchema-instance"
xmlns:SOAP-ENV = "http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd = "http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<namesp1:BabelFishResponse xmlns:namesp1 = "urn:xmethodsBabelFish">
<return xsi:type = "xsd:string">Bonjour, monde!</return>
</namesp1:BabelFishResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Odpowiedzi SOAP dostarczane przez HTTP muszą mieć te same kody stanu HTTP. Na przykład kod stanu 200 OK oznacza pomyślną odpowiedź. Kod stanu 500 Internal Server Error wskazuje, że wystąpił błąd serwera i że odpowiedź SOAP zawiera element Fault.
W poniższym przykładzie żądanie GetQuotation jest wysyłane do serwera SOAP za pośrednictwem protokołu HTTP. Żądanie ma parametr QuotationName , a oferta zostanie zwrócona w odpowiedzi.
Przestrzeń nazw funkcji jest zdefiniowana w http://www.xyz.org/quotation adres.
Oto żądanie SOAP -
POST /Quotation HTTP/1.0
Host: www.xyz.org
Content-Type: text/xml; charset = utf-8
Content-Length: nnn
<?xml version = "1.0"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">
<SOAP-ENV:Body xmlns:m = "http://www.xyz.org/quotations">
<m:GetQuotation>
<m:QuotationsName>MiscroSoft</m:QuotationsName>
</m:GetQuotation>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Odpowiednia odpowiedź SOAP wygląda następująco -
HTTP/1.0 200 OK
Content-Type: text/xml; charset = utf-8
Content-Length: nnn
<?xml version = "1.0"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">
<SOAP-ENV:Body xmlns:m = "http://www.xyz.org/quotation">
<m:GetQuotationResponse>
<m:Quotation>Here is the quotation</m:Quotation>
</m:GetQuotationResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
SOAP 1.1 został pierwotnie przesłany do W3C w maju 2000 r. Do oficjalnych zgłaszających należały duże firmy, takie jak Microsoft, IBM i Ariba, oraz mniejsze firmy, takie jak UserLand Software i DevelopMentor.
W lipcu 2001 r. Grupa robocza protokołu XML opublikowała „wersję roboczą” protokołu SOAP 1.2. W W3C dokument ten jest oficjalnie w toku, co oznacza, że dokument prawdopodobnie będzie wielokrotnie aktualizowany, zanim zostanie sfinalizowany.
SOAP w wersji 1.1 jest dostępny online pod adresem http://www.w3.org/TR/SOAP/
Wersja robocza SOAP w wersji 1.2 jest dostępna pod adresem http://www.w3.org/TR/soap12/
Zwróć uwagę, że W3C obsługuje również przesłanie „Wiadomości SOAP z załącznikami”, które oddziela się od podstawowej specyfikacji SOAP. Ta specyfikacja umożliwia wiadomościom SOAP dołączanie załączników binarnych, takich jak obrazy i pliki dźwiękowe. Aby uzyskać szczegółowe informacje, zobacz notatkę W3C pod adresemhttp://www.w3.org/TR/SOAP-attachments.