Úvod do webových služeb
V této kapitole naleznete výklad následujících témat:
Webová služba je jednoduchá komponenta nabízející určitou službu. Může jít např. o převod měn, zjištění kurzu akcie, zpracování objednávky, překlad textu aj. Webové služby umožňují jednoduchou komunikaci mezi aplikacemi ve velmi heterogenním prostředí, protože komunikace je založena na standardech nezávislých na platformě – především na jazyce XML a protokolu HTTP. Aplikace si mezi sebou posílají XML zprávy, které přenášejí dotazy a odpovědi jednotlivých aplikací. Webová služba je tedy softwarový systém umožňující interakci dvou strojů na síti. Je popsána ve strojově zpracovatelném formátu, konkrétně WSDL, viz dále. S webovou službou ostatní stroje komunikují způsobem předepsaným v jejím popisu pomocí protokolu SOAP, viz dále. Pro přenos informací mezi stroji se využívá již zavedených protokolů (důvodem je nedůvěra firewallů pro příchozí zprávy). Tj. SOAP zpráva se "zabalí" do již známého protokolu (HTTP, SMTP, ...), kterému firewall důvěřuje, po průchodu firewallem se příjemci dostane požadovaná zpráva. Protokoly SOAP a WSDL jsou oba provedeny v syntaxi jazyka XML tak, aby byly co nejméně závislé na zvolené verzi standardu XML.
Jinak řečeno: jedná o technologii, která umožňuje integrovat libovolné aplikace provozované na různých platformách a ovládat je prostřednictvím webového rozhraní, tj. z běžného internetového prohlížeče. Je toho dosaženo tím, že aplikace spolu komunikují posíláním XML zpráv pomocí HTTP protokolu (a XML i HTTP jsou standardy nezávislé na platformě). Podpora HTTP a XML je široce dostupná, a proto jsou i webové služby dostupné v podstatě všude. Viz též Webová služba (web-service).
Jedná se o užitečnou a perspektivní technologii. Filozofií webových služeb je propojit jinak běžně nepropojitelné aplikace. Hlavní nadějí vkládanou do webových služeb je, že se WWW změní ze současného souboru HTML stránek srozumitelných pouze lidem na soubor XML stránek (statických i dynamických) čitelných programy a tedy, že programy na zcela různých platformách (JavaScript, Java, C, MS .NET, mobilní telefony) budou moci spolu snadno komunikovat. (Obsahu HTML stránky totiž rozumí pouze člověk. Program vidí jen soubor typograficky upravených textů, najde např. co je napsáno kurzívou, ale nerozumí smyslu, nemůže např. najít ve stránce cenu popisovaného výrobku.)
Co webové služby přináší uživateli v praxi? V reálném nasazení informačních systémů je často třeba propojit více různých systémů od různých dodavatelů nebo běžících na různých platformách. Toto propojení je často nutné realizovat on-line, tj. synchronně zavolat jiný systém, získat či zapsat data a počkat si na výsledek. Kromě proprietárních komunikačních kanálů, na které se lze jen obtížně připojovat, se stále častěji uplatňuje otevření systémů právě pomocí webových služeb. Jedná se o otevřený standard, který je možné použít pro propojení všech systémů, které jej podporují.
Použití webových služeb se může ekonomicky velmi rychle vrátit. Veškerá data publikovaná dobře navrženou webovou službou je uživatel schopen okamžitě dodat obchodním partnerům. Nemusí je přizpůsobovat pro každého zvlášť, stačí poslat adresu služby. Webová služba je sama o sobě dost popisná a obecná. Pokud naopak uživatel zpracovává cizí data a nechce je nadále zpracovávat v různých nekompatibilních formátech, může přesvědčit partnery, aby také přešli na webové služby. Ušetří si tím značnou část nákladů.
Webové služby jsou nástupcem dřívějších technologií pro vzdálené volání funkcí v distribuovaných systémech (jako např. CORBA, RMI). Webové služby vs. CORBA, RMI, DCOM:
- nezávislé na použité platformě (operačním systému, programovacím jazyku, typu procesoru)
- dostupné globálně, umožňují snadnou integraci různých prostředí
- postaveny na jednoduchých standardech jako XML a HTTP
- méně efektivní než "nativní" protokoly (zdlouhavá syntaxe XML je jednoduše čitelná pro člověka, ale počítač ji musí složitě parsrovat, což stojí více procesorového času a operační paměti, naproti tomu CORBA, DCOM má zápis zpráv pro komunikaci daleko kratší, ale binární)
Výhoda použití HTTP také spočívá v tom, že stávající síťová infrastruktura, zvláště ve firemní sféře, dovoluje v podstatě neomezenou komunikaci na portu vyhrazeném pro HTTP (TCP port 80). Webové služby je možné používat bez nutnosti zásahu do konfigurace aktivních síťových prvků jako jsou firewally. Při použití technologií DCOM nebo CORBA je potřeba povolit komunikaci na portech, které používají jejich příslušné přenosové protokoly.
Webové služby jsou založeny na vzájemné interakci tří základních částí:
- poskytovatele služeb,
- registru služeb,
- samotného klienta.
Poskytovatel služeb (Service Provider) je subjekt, který službu poskytuje. Jde o softwarovou či hardwarovou platformu, která zajišťuje provoz vlastních webových služeb.
Registr služby (Service Registry) je místo, kde jsou uloženy informace o webových službách a jejich poskytovatelích. Místo, na kterém uživatelé mohou vyhledávat poskytovatele a které současně poskytuje informace potřebné pro navázání komunikace mezi uživatelem a poskytovatelem služeb.
Klient (Service Requester) si zjistí adresu služby (vyhledá v registru nebo má adresu přímo od poskytovatele), stáhne si popis služby a následně je schopen ji využívat. Z hlediska architektury se jedná o aplikaci, která funkci volá, tedy zpravidla aplikace běžící ve webovém prohlížeči ovládaná uživatelem.
Příklad využití 1: Uživatel má firemní intranet a potřebuje některá data z něj dostat do specializovaného produktu, který s daty pracuje. Typické propojení intranetu a dalšího produktu. Intranetový informační systém funguje jako poskytovatel služby.
Příklad využití 2: Uživatel má fungující e-shop a chce v něm nabízet produkty dalšího partnera. Partner zpřístupní data pomocí webových služeb a e-shop z ní pak data čte, případně provádí určité operace.
Proces publikace služby, její vyhledání a připojení musí být realizováno přesně definovanými protokoly. Technologii webových služeb tvoří následující části (pro každou je využíván odpovídající protokol):
- Přenos služby a XML komunikace - Přenos dat zajišťují standardní komunikační protokoly, typicky HTTP (ale mohou to být i jiné SMTP, FTP a další). Veškerá komunikace mezi poskytovatelem a klientem probíhá v XML zprávách. Komunikaci zajišťují protokoly, které ho využívají. Typicky je to SOAP či REST (ale existují i jiné: XML-RPC atp.).
- Popis služby (Service description) - Popis služby zajistí potřebné informace o rozhraní služby. Jedná se o popis komunikace, formát zpráv, názvy procedur, typy parametrů, vazby protokolu a další. Většinou se používá jazyk WSDL (viz dále), který využívá SOAP pro komunikaci.
- Vyhledání služby (Service discovery) - Pro vyhledání webové služby se běžně používá registr služeb, kam poskytovatel služby vloží její adresu a popis. Nejčastější implementací je UDDI (viz dále).
Celá infrastruktura webových služeb je tedy založena na těchto základních technologiích:
SOAP (Simple Object Access Protocol, tj. jednoduchý protokol pro přístup k objektům) - protokol používaný pro komunikaci. Je to protokol definující způsob komunikace mezi webovými službami přenášející data zapsaná jako XML přes síť, hlavně pomocí HTTP. SOAP je v podstatě nástupce staršího protokolu XML-RPC. Nejčastěji se SOAP používá jako náhrada vzdáleného volání procedur (RPC), tedy v modelu požadavek/odpověď. Tedy poskytovatel klientovi nabízí množinu funkcí nad daty. Klient pomocí XML tyto funkce vzdáleně volá a čeká na odpověď. Tj. jedna aplikace pošle v XML zprávě požadavek druhé aplikaci, ta požadavek obslouží a výsledek zašle jako druhou zprávu zpět původnímu iniciátorovi komunikace. V tomto případě bývá webová služba vyvolána webovým serverem (např. Apache), který čeká na požadavky klientů a v okamžiku, kdy přes HTTP přijde soapová zpráva, spustí webovou službu a předá jí požadavek. Výsledek služby je pak předán zpět klientovi jako odpověď.
Protokol SOAP, který se stará o realizaci přenosu dat mezi žádajícím a poskytovatelem, umožňuje realizaci komunikace typu: jednosměrná komunikace, požadavek/odpověď, Peer-to-Peer (konverzace).
REST (Representational State Transfer) - Je to architektura rozhraní, navržená pro distribuované prostředí. Distribuované prostředí v tomto smyslu znamená, že části programu běží na různých strojích a pro svoji komunikaci využívají síť. Pod programem si můžeme představit například webovou aplikaci, kde internetový prohlížeč komunikuje s webovým serverem, aplikaci pro výměnu dat mezi finančními institucemi, kde dochází k vzájemnému volání mezi servery. Rozhraní REST je použitelné pro jednotný a snadný přístup ke zdrojům. Zdrojem mohou být data, stejně jako stavy aplikace (pokud je lze popsat konkrétními daty). REST je tedy na rozdíl od známějších XML-RPC či SOAP, orientován datově, nikoli procedurálně. Všechny zdroje mají vlastní identifikátor URI a REST definuje čtyři základní metody pro přístup k nim: GET, PUT, POST a DELETE.
WSDL (Web Services Description Language) - standardní formát pro popis rozhraní webové služby. Je to jazyk pro popis poskytovaných služeb. Popisuje, co nabízí webová služba za funkce a způsob, jak se jí na to zeptat. (Možnost vzdáleně volat funkce pomocí SOAP je k ničemu, pokud nevíme, jaké funkce se dají zavolat, jaké mají parametry a jaké vrací hodnoty. K tomu právě slouží WSDL.) Zapisuje se v XML formátu. Zpravidla tedy popisuje SOAP komunikaci. Podporované operace a zprávy jsou popsány abstraktně a potom se omezují na konkrétní síťový protokol a formát zprávy. Dokument v jazyce WSDL příslušný k určité webové službě ji plně popisuje, pokud tedy máme WSDL popis, můžeme webovou službu začít používat. Klientský program připojující se k webové službě umí WSDL číst, aby zjistil, jaké funkce jsou dostupné na serveru. Jakékoli použité speciální datové typy jsou uložené ve WSDL souboru ve formátu XML. Program může používat SOAP pro zavolání funkcí napsaných ve WSDL.
UDDI - Standard UDDI (Universal Description, Discovery and Integration) - standardní mechanismus umožňující registraci a vyhledávání webových služeb. Je to mechanismus umožňující registraci a vyhledávání webových služeb. UDDI je otevřený obchodní registr založený na XML. Nabízí seznam služeb a kontaktů, v kterých je možno vyhledávat.
Tedy ke každé webové službě by měl být k dispozici její formální popis v jazyce WSDL. Z tohoto popisu již jde automaticky vygenerovat soapový požadavek. Ve větších systémech nebo přímo v otevřeném prostředí Internetu se popis služby může zaregistrovat do UDDI registru. Klient, který chce využít webovou službu, získá buď přímo její popis nebo ji získá přes UDDI. Z něj je jasné, jakou strukturu má mít soapová zpráva a kam se má webové službě poslat, aby ji rozpoznala.
Schéma tří základních technologií webových služeb (SOAP, WSDL, UDDI)
Webová služba je softwarový systém umožňující interakci dvou strojů na síti. Je popsána ve strojově zpracovatelném formátu, konkrétně WSDL. S webovou službou ostatní stroje komunikují způsobem předepsaným v jejím popisu pomocí protokolu SOAP, případně pomocí jiných, již zavedených protokolů (tzv. tunelování firewallu). Důvodem pro "zabalení" SOAP zprávy je nedostatek důvěry ze strany firewallů již zavedených systémů.
Protokoly SOAP a WSDL jsou oba provedeny v syntaxi jazyka XML, který je navržen tak, aby byl snadno strojově zpracovatelný. Protokol SOAP i WSDL byly navrženy tak, aby byly co nejméně závislé na zvolené verzi standardu XML. Oba protokoly jsou zavázány dodržet příslušné standardy WSDL (SOAP) a zvolený standard XML.
Pro ilustraci popisů výše uvedeme příklad zjištění detailů auta z pomyslného autobazaru s využitím protokolu SOAP (se systémem ABRA Gen to nemá naprosto nic společného, jedná se pouze o příklad pro lepší představu, jak výše popisovaná komunikační zpráva může vypadat):
<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>
Poskytovatel zpracuje tuto zprávu a vrátí detaily auta s ID 123456:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/ ">
<soap:Body>
<getCarDetailsResponse xmlns="http://www.moje-pujcovna-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>
Zpráva v SOAPu je tedy jednoduchý XML dokument, který má kořenový element Envelope, v něm elementy Header (hlavička, nepovinná) a Body (tělo), v němž se přenášejí informace identifikující volanou službu a předávané parametry, resp. návratové hodnoty služby. SOAP používá jmenné prostory pro identifikování jednotlivých částí XML zprávy. Obálka, hlavičky a tělo zprávy patří do jmenného prostoru http://schemas.xmlsoap.org/soap/envelope/.
SOAP požadavek se zasílá v těle HTTP požadavku. Používá se přitom metoda POST, která dovoluje posílat data v těle HTTP požadavku. Požadavek musí obsahovat HTTP hlavičku SOAPAction, která identifikuje SOAP požadavek. Tuto hlavičku mohou používat jednak firewally k filtrování požadavků a jednak může obsahovat URI s identifikací služby, která se má vyvolat. Pokud je obsahem hlavičky prázdný řetězec, služba ke spuštění je identifikována přímo adresou, na kterou směřuje požadavek.