Simple Object Access Protocol

SOAP (celým názvom Simple Object Access Protocol) je protokolom na výmenu správ založených na XML prostredníctvom siete, hlavne pomocou HTTP.

Formát SOAP tvorí základnú vrstvu komunikácie medzi webovými službami a poskytuje prostredie na tvorbu zložitejšej komunikácie.

Existuje niekoľko rôznych druhov šablón komunikácie prostredníctvom protokolov SOAP. Najznámejší z nich je RPC šablóna, kde jeden z účastníkov komunikácie je klient a na druhej strane je server. Server ihneď odpovedá na požiadavky klienta.

SOAP je nástupca XML-RPC, od ktorého si požičiava jeho spôsob prenosu dát a ďalšie vlastnosti. Obálka, hlavička a telo komunikácie je ale pravdepodobne z WDDX.

Pôvodne ho navrhol Dave Winer, Don Box, Bob Atkinson a Mohsen Al-Ghosein v roku 1998 za podpory firmy Microsoft (kde tou dobou Atkinson a Al-Ghosein pracovali). Dnes je SOAP špecifikácia spravovaná XML skupinou tvoriacou internetové protokoly z W3C konzorcia.

Formy prenosu 
HTTP aj SMTP sa dajú použiť ako aplikačná vrstva pre protokol SOAP. Ale HTTP dosiahol omnoho väčšie využitie. Je to predovšetkým preto, že HTTP je prakticky základom pre dnešnú Internetovú infraštruktúru. Vďaka tomu môže SOAP jednoducho prechádzať cez firewall. To je jeho hlavná výhoda oproti iným distribuovaným protokolom, ako je napríklad DCOM, ktoré sú väčšinou firewallom blokované.

XML formát bol zvolený ako štandard na prenos SOAP správ pre jeho rozšírenosť a dostupnosť vývojových nástrojov ponúkaných ako opensource alebo freeware a teda voľne k používaniu.

Zdĺhavá syntax XML má svoje výhody aj nevýhody. Je jednoducho čitateľná pre človeka, ale počítač ju musí zložito parsovať a stojí to dosť procesorového času a operačnej pamäte. Oproti tomu CORBA, GIOP alebo DCOM má zápis správ na komunikáciu ďaleko kratší a binárny, teda pre človeka nečitateľný. Na druhej strane vývoj počítačov ide rýchle dopredu a prestáva to byť na ťarchu. Bola už vytvorená aj binárna forma XML.

Slabé stránky 
Veľký zápis komunikácie.

Príklad 
Príklad správy od klienta, ktorý sa pýta na informácie o produkte na sklade pomocou webovej služby. Klient sa dožaduje informácie o produkte označenom ID 827635:

 <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
     <getProductDetails xmlns="http://warehouse.example.com/ws">
       <productID>827635</productID>
     </getProductDetails>
   </soap:Body>
 </soap:Envelope>

Tu je odpoveď webovej služby pre klienta.

 <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
     <getProductDetailsResponse xmlns="http://warehouse.example.com/ws">
       <getProductDetailsResult>
         <productName>Čokoláda sada 3 chutí</productName>
         <productID>827635</productID>
         <popis>Čokoláda horká, biela a smotanová</popis>
         <cena>98,50</cena>
         <naSklade>áno</naSklade>
       </getProductDetailsResult>
     </getProductDetailsResponse>
   </soap:Body>
 </soap:Envelope>

Zdroje 
 W3Schools SOAP Tutorial  (Pozn: Je znovu aktuálna)
 W3C SOAP: Základy
 W3C SOAP: Stavba správ
 W3C SOAP: Dodatky

Internet