A számítástechnikában a SOAP (Simple Object Access Protocol) egy protokoll, amelyet webszolgáltatások hálózaton keresztüli kommunikációjához terveztek. Az üzenetek XML-alapúak és általában más, alkalmazás rétegbeli protokollokra támaszkodva továbbítódnak, például Távoli Eljáráshívás (Remote Procedure Call, RPC) vagy a Hypertext Transport Protocoll (HTTP) protokollokra.

SOAP struktúra

Egy példa arra, hogy működnek a SOAP eljárások. Egy SOAP üzenetet küldhetünk egy webszolgáltatással rendelkező weboldalnak, pl. egy ingatlanügynökségnek, melyben megadjuk a keresési paramétereket. Az oldal egy XML dokumentumot küld vissza a kért adatokkal, pl. az ingatlanok árai, helye, tulajdonságai. Mivel ez az adat a gépek számára könnyen feldolgozható formátumban van, így egyszerűen integrálható egy weboldalba vagy alkalmazásba.

A SOAP architektúra több réteget specifikál: üzenetformátumot (MessageExchangePatterns, MEP), az alatta lévő szállítási protokollt, az üzenetfeldolgozó modellt és a protokoll bővíthetőségét. A SOAP az XML-RPC örökösének tekinthető.

Története

szerkesztés

A SOAP a WSDL és a UDDI mellett a webszolgáltatások harmadik alapvető elemét képezi. A név eredetileg az angol Simple Object Access Protocol rövidítése volt, de a szabvány 1.2-es verziójától kezdve a Simple Object Access Protocol nevet már nem használják, mert az elnevezés félrevezető volt. A SOAP szabványt a W3C tartja karban.

A SOAP szabványt eredetileg Dave Winer, Don Box, Bob Atkinson, és Mohsen Al-Ghosein tervezték 1998-ban (egy Microsoft projekt keretein belül), mint egy objektum-elérési protokollt.

Specifikáció

szerkesztés

A SOAP által specifikált üzenetküldő keretrendszer az alábbi részekből áll:

  • A SOAP feldolgozási modell, ami leírja, hogy kell feldolgozni a SOAP üzeneteket
  • A SOAP bővíthetőségi modell, mely meghatározza a SOAP modulok és tulajdonságok koncepcióját
  • A SOAP alsóbb protokollhoz csatlakozó keretrendszer szabályokat definiál arra vonatkozóan, hogy kell csatlakozni egy alsóbb réteghez, hogy SOAP üzeneteket tudjunk továbbítani
  • A SOAP üzenetszerkezet definiálja, hogy kell felépíteni egy SOAP üzenetet

Feldolgozási modell

szerkesztés

A SOAP feldolgozási modell egy elosztott feldolgozási modellt definiál a résztvevői, a SOAP csomópontok számára, valamint azt, hogy hogy dolgozza fel a fogadó az üzenetet. A következő SOAP csomópont típusok lehetnek:

  • SOAP küldő

Egy csomópont, ami üzenetet küld

  • SOAP fogadó

Egy csomópont, ami üzeneteket fogad

  • SOAP üzenet útvonal

Csomópontok egy halmaza, melyeken egy üzenet áthalad

  • Kezdeti SOAP küldő

Az a csomópont, ahonnan az üzenet útvonala elindult

  • SOAP közvetítő

Egy olyan csomópont, amely küld és fogad is üzeneteket. Feldolgozza a beérkezett üzenetet és továbbítja a végső cél felé.

  • Végső SOAP fogadó

Egy olyan SOAP fogadó, mely a SOAP üzenet célpontja. Ennek a feladata az üzenet törzsének a feldolgozása. Bizonyos körülmények között előfordulhat, hogy a SOAP üzenet nem éri el a végső fogadót, például egy SOAP közvetítőnél felmerült probléma miatt. Egy végső SOAP fogadó nem lehet közvetítő is egy adott üzenet esetén.

Továbbítási eljárások

szerkesztés

Mind a HTTP, mind pedig az SMTP lehetséges szállítási protokollok SOAP üzenetek továbbítására, ugyanakkor a HTTP szélesebb körben elfogadott, mivel jól együttműködik az internet mai szerkezetével, különösen jól működik együtt a HTTP a tűzfalakkal. A SOAP ugyanakkor továbbítható HTTPS protokollon keresztül is.

Ez az előnye a többi elosztott protokollal szemben, úgy mint a GIOP/IIOP vagy a DCOM, amiket kiszűrnek a tűzfalak.

Üzenetformátum

szerkesztés

Az XML formátumra esett a választás, mint standard üzenetformátum, mivel széles körben használt a nagyvállalatoknál és a nyílt forrású fejlesztéseknél. Ezen kívül rengeteg szabadon elérhető eszköz segíti a SOAP alapú megoldásra való áttérést. Az XML szintaxisa lehet előny és hátrány is egyszerre. Az emberi szem számára könnyen olvasható, könnyebb a hibadetektálás és áthidalja az együttműködési problémákat (pl. endianizmus), emellett viszont lassan és nehezen feldolgozható. Pl. a CORBA egy sokkal egyszerűbb és rövidebb bináris üzenetformátumot használ. Másrészről viszont lehetőség van szoftveresen felgyorsítani az XML feldolgozást.

POST /InStock HTTP/1.1
Host: www.example.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 299

<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
  <soap:Header>
  </soap:Header>
  <soap:Body>
    <m:GetStockPrice xmlns:m="http://www.example.org/stock">
      <m:StockName>IBM</m:StockName>
    </m:GetStockPrice>
  </soap:Body>
</soap:Envelope>

Előnyök és hátrányok

szerkesztés
  • A SOAP elég sokoldalú, így különböző szállítási protokollokon keresztül is kommunikálhatunk vele. A szabvány szerint HTTP-t használnak, de működik SMTP-vel vagy JMS-sel is.
  • Mivel a SOAP jól összefér a HTTP kérés/válasz modelljével, könnyedén átjut a tűzfalakon és proxykon anélkül, hogy a SOAP protokollt módosítani kellene.

Hátrányok

szerkesztés
  • Az XML bőbeszédű formátuma miatt a SOAP lassabb lehet, mint mondjuk a CORBA üzenetküldési modellje. Ez nem okozhat problémát kis méretű üzenetek estén.
  • Ha a HTTP-re támaszkodunk mint szállítási protokoll, és nem használjuk a WS-Addressing vagy ESB-t, a kommunikáló felek szerepei rögzítettek. Csak az egyik fél (kliens) használhatja a másik fél szolgáltatásait.