Úvod do webových služieb
V tejto kapitole nájdete výklad nasledujúcich tém:

Webová služba je jednoduchý komponent ponúkajúci určitú službu. Môže ísť napr. o prevod mien, zistenie kurzu akcie, spracovanie objednávky, preklad textu a.i. Webové služby umožňujú jednoduchú komunikáciu medzi aplikáciami vo veľmi heterogénnom prostredí, pretože komunikácia je založená na štandardoch nezávislých na platforme – predovšetkým na jazyku XML a protokole HTTP. Aplikácie si medzi sebou posielajú XML správy, ktoré prenášajú otázky a odpovede jednotlivých aplikácií. Webová služba je teda softwareový systém umožňujúci interakciu dvoch strojov na sieti. Je popísaná v strojovo spracovateľnom formáte, konkrétne WSDL, viď ďalej. Ostatné stroje s webovou službou komunikujú spôsobom predpísaným v jej popise pomocou protokolu SOAP, viď ďalej. Na prenos informácií medzi strojmi sa využívajú už zavedené protokoly (dôvodom je nedôvera firewallov voči prijatým správam). Tzn. Tzn. SOAP správa sa "zabalí" do už známeho protokolu (HTTP, SMTP, ...), ktorému firewall dôveruje, po prechode firewallom príjemca dostane požadovanú správu. Protokoly SOAP a WSDL sú oba realizované v syntaxi jazyka XML tak, aby boli čo najmenej závislé na zvolenej verzii štandardu XML.
Inak povedané: ide o technológiu, ktorá umožňuje integrovať ľubovoľné aplikácie používané na rôznych platformách a ovládať ich prostredníctvom webového rozhrania, tzn. z bežného internetového prehliadača. Je to možné vďaka tomu, že aplikácie spolu komunikujú posielaním XML správ pomocou HTTP protokolu (a XML i HTTP sú štandardy nezávislé na platforme). Podpora HTTP a XML je široko dostupná, a vďaka tomu sú i webové služby dostupné v podstate všade. Viď tiež Webová služba (web-service).
Ide o užitočnú a perspektívnu technológiu. Filozofiou webových služieb je prepojiť inak bežne neprepojiteľné aplikácie. Hlavnou nádejou vkladanou do webových služieb je, že sa WWW zmení zo súčasného súboru HTML stránok zrozumiteľných len pre ľuďí na súbor XML stránok (statických i dynamických) čitateľných pre programy a teda, že programy na úplne odlišných platformách (JavaScript, Java, C, MS .NET, mobilné telefóny) budú môcť spolu jednoducho komunikovať. (Obsahu HTML stránky totiž rozumie len človek. Program vidí len súbor typograficky upravených textov, nájde napr. čo je napísané kurzívou, ale nerozumie zmyslu, nemôže napr. nájsť v stránke cenu popisovaného výrobku.)
Čo webové služby prinášajú užívateľovi v praxi? V reálnom nasadení informačných systémov je často potrebné prepojiť niekoľko rôznych systémov od rôznych dodávateľov alebo systémov, ktoré bežia na rôznych platformách. Toto prepojenie je často nutné realizovať on-line, tzn. synchrónne zavolať iný systém, získať či zapísať dáta a počkať si na výsledok. Okrem proprietárnych komunikačných kanálov, na ktoré sa dá len problematicky pripájať, sa čoraz častejšie uplatňuje otvorenie systémov práve pomocou webových služieb. Ide o otvorený štandard, ktorý je možné použiť na prepojenie všetkých systémov, ktoré ho podporujú.
Použitie webových služieb sa môže ekonomicky veľmi rýchlo vrátiť. Všetky dáta publikované dobre navrhnutou webovou službou je užívateľ schopný okamžite dodať obchodným partnerom. Nemusí ich prispôsobovať pre každého zvlášť, stačí poslať adresu služby. Webová služba je sama o sebe dosť popisná a všeobecná. Pokiaľ naopak užívateľ spracováva cudzie dáta a nechce ich naďalej spracovávať v rôznych nekompatibilných formátoch, môže presvedčiť partnerov, aby tiež prešli na webové služby. Ušetrí si tak značnú časť nákladov.
Webové služby sú nástupcom starších technológií na vzdialené vyvolávanie funkcií v distribuovaných systémoch (ako napr. CORBA, RMI). Webové služby vs. CORBA, RMI, DCOM:
- nezávislé na použitej platforme (operačnom systéme, programovacom jazyku, type procesora)
- dostupné globálne, umožňujú jednoduchú integráciu rôznych prostredí
- postavené na jednoduchých štandardoch ako XML a HTTP
- menej efektívne ako "natívne" protokoly (zdĺhavá syntax XML je jednoducho čitateľná pre človeka, ale počítač ju musí zložito parsrovať, čo znamená viac procesorového času a operačnej pamäte, oproti tomu CORBA, DCOM má zápis správ pre komunikáciu omnoho kratší, ale binárny)
Výhoda použitia HTTP spočíva aj v tom, že súčasná sieťová infraštruktúra, obzvlášť vo firemnej sfére, umožňuje v podstate neobmedzenú komunikáciu na porte vyhradenom pre HTTP (TCP port 80). Webové služby je možné používať bez nutnosti zásahu do konfigurácie aktívnych sieťových prvkov ako sú firewally. Pri použití technológií DCOM alebo CORBA je potrebné povoliť komunikáciu na portoch, ktoré používajú ich príslušné prenosové protokoly.

Webové služby sú založené na vzájomnej interakcii troch základných častí:
- poskytovateľa služieb,
- registra služieb,
- samotného klienta.
Poskytovateľ služieb (Service Provider) je subjekt, ktorý službu poskytuje. Ide o softwarovú alebo hardwarovú platformu, ktorá zabezpečuje prevádzku vlastných webových služieb.
Register služby (Service Registry) je miesto, kde sú uložené informácie o webových službách a ich poskytovateľoch. Miesto, na ktorom užívatelia môžu vyhľadávať poskytovateľa a ktoré súčasne poskytuje informácie potrebné na naviazanie komunikácie medzi užívateľom a poskytovateľom služeb.
Klient (Service Requester) si zistí adresu služby (vyhľadá v registri alebo má adresu priamo od poskytovateľa), stiahne si popis služby a následne ju je schopný využívať. Z hľadiska architektúry ide o aplikáciu, ktorá funkciu vyvolá, tzn. obvykle aplikácia bežiaca vo webovom prehliadači ovládaná užívateľom.
Príklad využitia 1: Užívateľ má firemný intranet a potrebuje z neho niektoré dáta dostať do špecializovaného produktu, ktorý s dátami pracuje. Typické prepojenie intranetu a ďalšieho produktu. Intranetový informačný systém funguje ako poskytovateľ služby.
Príklad využitia 2: Užívateľ má fungujúci e-shop a chce v ňom ponúkať produkty ďalšieho partnera. Partner sprístupni dáta pomocou webových služieb a e-shop z neho potom dáta číta, prípadne vykonáva určité operácie.
Proces publikácie služby, jej vyhľadanie a pripojenie musí byť realizované presne definovanými protokolmi. Technológiu webových služieb tvoria nasledujúce časti (pre každú je využívaný príslušný protokol):
- Prenos služby a XML komunikácia - Prenos dát zabezpečujú štandardné komunikačné protokoly, typicky HTTP (ale môžu to byť aj iné SMTP, FTP a ďalšie). Celá komunikácia medzi poskytovateľom a klientom prebieha v XML správach. Komunikáciu zabezpečujú protokoly, ktoré ho využívajú. Typicky je to SOAP či REST (ale existujú aj iné: XML-RPC atď.).
- Popis služby (Service description) - Popis služby zabezpečí potrebné informácie o rozhraní služby. Ide o popis komunikácie, formát správ, názvy procedúr, typy parametrov, väzby protokolu a ďalšie. Väčšinou sa používa jazyk WSDL (viď ďalej), ktorý využíva SOAP pre komunikáciu.
- Vyhľadanie služby (Service discovery) - Na vyhľadanie webovej služby sa bežne používa register služieb, do ktorého poskytovateľ služby vloží jej adresu a popis. Najčastejšou implementáciou je UDDI (viď ďalej).
Celá infraštruktúra webových služieb je teda založená na týchto základných technológiách:
SOAP (Simple Object Access Protocol, tzn. jednoduchý protokol pre prístup k objektom) - protokol používaný na komunikáciu. Je to protokol definujúci spôsob komunikácie medzi webovými službami prenášajúci dáta zapísané ako XML cez sieť, hlavne pomocou HTTP. SOAP je v podstate nástupca staršieho protokolu XML-RPC. Najčastejšie sa SOAP používa ako náhrada vzdialeného volania procedúr (RPC), tzn. v modeli požiadavka/odpoveď. Poskytovateľ klientovi ponúka množinu funkcií nad dátami. Klient pomocou XML tieto funkcie vzdialene volá a čaká na odpoveď. Tzn. jedna aplikácia pošle v XML správe požiadavku druhej aplikácii, tá požiadavku obslúži a výsledok pošle ako druhú správu naspäť pôvodnému iniciátorovi komunikácie. V tomto prípade býva webová služba vyvolaná webovým serverom (napr. Apache), ktorý čaká na požiadavky klientov a v okamihu, keď prostredníctvom HTTP príde soapová správa, spustí webovú službu a odovzdá jej požiadavku. Výsledok služby sa potom odovzdá späť klientovi ako odpoveď.
Protokol SOAP, ktorý sa stará o realizáciu prenosu dát medzi žiadajúcim a poskytovateľom, umožňuje realizáciu komunikácie typu: jednosmerná komunikácia, požiadavka/odpoveď, Peer-to-Peer (konverzácia).
REST (Representational State Transfer) - Je to architektúra rozhrania, navrhnutá pre distribuované prostredie. Distribuované prostredie v tomto zmysle znamená, že časti programu bežia na rôznych strojoch a pre svoju komunikáciu využívajú sieť. Pod programom si môžeme predstaviť napríklad webovú aplikáciu, kde internetový prehliadač komunikuje s webovým serverom, aplikáciu pre výmenu dát medzi finančnými inštitúciami, kde dochádza k vzájomnému volaniu medzi servermi. Rozhranie REST je použiteľné pre jednotný a ľahký prístup k zdrojom. Zdrojom môžu byť dáta, rovnako ako stavy aplikácie (ak je ich možné popísať konkrétnymi dátami). REST je teda na rozdiel od známejších XML-RPC či SOAP, orientovaný dátovo, nie procedurálne. Všetky zdroje majú vlastný identifikátor URI a REST definuje štyri základné metódy pre prístup k nim: GET, PUT, POST a DELETE.
WSDL (Web Services Description Language) - štandardný formát pre popis rozhrania webovej služby. Je to jazyk na popis poskytovaných služieb. Popisuje, aké ponúka webová služba funkcie a spôsob, ako sa jej na to spýtať. (Možnosť vzdialene vyvolať funkcie pomocou SOAP je nanič, pokiaľ nevieme, aké funkcie sa dajú vyvolať, aké majú parametre a aké vracajú hodnoty. Na to slúži práve WSDL.) Zapisuje sa v XML formáte. Zvyčajne teda popisuje SOAP komunikáciu. Podporované operácie a správy sú popísané abstraktne a následne sa obmedzujú na konkrétny sieťový protokol a formát správy. Dokument v jazyku WSDL prislúchajúci k určitej webovej službe ju plne popisuje, tzn. pokiaľ máme WSDL popis, môžeme webovú službu začať používať. Klientsky program pripájajúci sa k webovej službe dokáže WSDL čítať, aby zistil, aké funkcie sú dostupné na serveri. Akékoľvek použité špeciálne dátové typy sú uložené vo WSDL súbore vo formáte XML. Program môže používať SOAP na vyvolanie funkcií napísaných vo WSDL.
UDDI - Standard UDDI (Universal Description, Discovery and Integration) - štandardný mechanizmus umožňujúci registráciu a vyhľadávanie webových služieb. Je to mechanizmus umožňujúci registráciu a vyhľadávanie webových služieb. UDDI je otvorený obchodný register založený na XML. Ponúka zoznam služieb a kontaktov, v ktorých je možné vyhľadávať.
Ku každej webovej službe by mal byť teda k dispozícii jej formálny popis v jazyku WSDL. Z tohto popisu je už možné automaticky vygenerovať soapovú požiadavku. Vo väčších systémoch alebo priamo v otvorenom prostredí Internetu sa popis služby môže zaregistrovať do UDDI registra. Klient, ktorý chce využiť webovú službu, získa buď priamo jej popis alebo ju získa prostredníctvom UDDI. Z neho je jasné, akú štruktúru má mať soapová správa a kam sa má webovej službe poslať, aby ju rozpoznala.
Schéma troch základných technológií webových služieb (SOAP, WSDL, UDDI)
Webová služba je softwarový systém umožňujúci interakciu dvoch strojov na sieti. Je popísaná v strojovo spracovateľnom formáte, konkrétne WSDL. Ostatné stroje s webovou službou komunikujú spôsobom predpísaným v jej popise pomocou protokolu SOAP, prípadne pomocou iných, už zavedených protokolov (tzv. tunelovanie firewallu). Dôvodom pre "zabalenie" SOAP správy je nedostatok dôvery zo strany firewallov už zavedených systémov.
Protokoly SOAP a WSDL sú oba realizované v syntaxi jazyka XML, ktorý je navrhnutý tak, aby bol ľahko strojovo spracovateľný. Protokoly SOAP a WSDL boli navrhnuté, aby boli čo najmenej závislé na zvolenej verzii štandardu XML. Oba protokoly sú zaviazané dodržať príslušné štandardy WSDL (SOAP) a zvolený štandard XML.
Na ilustráciu vyššie uvedených popisov uvedieme príklad zistenia detailov auta z pomyselného autobazáru s využitím protokolu SOAP (so systémom ABRA Gen to nemá vôbec nič spoločné, ide iba o príklad kvôli lepšej predstave, ako vyššie popisovaná komunikačná správa môže vyzerať):
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/ "> <soap:Body> <getCarDetails xmlns="http://www.moje-pujcovna-aut.cz/ws "> <carID>123456</carID> </getCarDetails> </soap:Body> </soap:Envelope>
Poskytovateľ spracuje túto správu a vráti detaily auta s ID 123456:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/ "> <soap:Body> <getCarDetailsResponse xmlns="http://www.moja-pozicovna-aut.cz/ws "> <getCarDetailsResult> <carRegistrationPlate>ABC1234</productName> <carID>123456</productID> <description>Škoda Fabia 1.2</description> <price>70000</price> <year>2002</year> </getCarDetailsResult> </getCarDetailsResponse> </soap:Body> </soap:Envelope>
Správa v SOAPe je teda jednoduchý XML dokument, ktorý má koreňový element Envelope, v ňom elementy Header (hlavička, nepovinná) a Body (telo), v ktorom sa prenášajú informácie identifikujúce vyvolávanú službu a odovzdávané parametre, resp. návratové hodnoty služby. SOAP používa menné priestory na identifikovanie jednotlivých častí XML správy. Obálka, hlavičky a telo správy patria do menného priestoru http://schemas.xmlsoap.org/soap/envelope/.
SOAP požiadavka sa zasiela v tele HTTP požiadavky. Používa sa pritom metóda POST, ktorá umožňuje posielať dáta v tele HTTP požiadavky. Požiadavka musí obsahovať HTTP hlavičku SOAPAction, ktorá identifikuje SOAP požiadavku. Túto hlavičku môžu používať jednak firewally na filtrovanie požiadaviek a jednak môže obsahovať URl s identifikáciou služby, ktorá sa má vyvolať. Ak je obsahom hlavičky prázdny reťazec, služba na spustenie je identifikovaná priamo adresou, na ktorú smeruje požiadavka.