Obsah přednášky Webové služby a XML Miroslav Beneš Co jsou to webové služby Architektura webových služeb SOAP SOAP a Java SOAP a PHP SOAP a C# Webové služby a XML 2 Co jsou to webové služby rozhraní k aplikaci dostupné prostřednictvím počítačové sítě, založené na standardních internetových technologiích je-li aplikace dostupná přes síť pomocí kombinace protokolů jako HTTP, XML, SMTP, nebo Jabber, je to webová služba vrstva abstrakce mezi aplikačním programem a klientem Co jsou to webové služby funkčnost služby není závislá na tom, v jakém jazyce je klient nebo server implementován (Java, C++, PHP, C#,...) příklad: HTML stránky: aplikace=www server, klient=prohlížeč další příklady: kurzovní lístky, burza, vyhledávací služby (Google), mapy, počasí Webové služby a XML 3 Webové služby a XML 4 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 1
Struktura aplikačního serveru aplikační program implementuje vlastní logiku aplikace (business logic) Struktura aplikačního serveru klient Service Listener komunikuje s okolím prostřednictvím některého transportního protokolu (HTTP, SOAP, Jabber,...) aplikační program Service Proxy Service Listener Service Proxy zprostředkovává dekódování požadavku, volání aplikačních funkcí, případně kódování odpovědi klient Webové služby a XML 5 Webové služby a XML 6 Architektura webových služeb Příklad aplikace využívající WS Just-In-Time Integration dynamická integrace aplikačních služeb na základě požadavků z aplikační oblasti nezávisí na platformě, ve které jsou tyto služby implementovány poskytovatel služby publikuje popis svých služeb v registru služeb spotřebitel služby vyhledává v registru službu podle svých požadavků, používá službu WSDL UDDI adresář Java Vývojové prostředí rozhraní komponenta služba SOAP / HTTP aplikace Webové služby a XML 7 Webové služby a XML 8 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 2
Vrstvová architektura Network základní komunikace, adresování, směrování, totéž jako síťová vrstva TCP/IP Transport přímá komunikace mezi aplikacemi po síti; může být použit téměř libovolný transportní protokol, např. TCP, HTTP (nejčastější), SMTP, Jabber Packaging balení dat do formátu, jemuž rozumějí všichni účastníci (serializace, marshalling) HTML (?), XML a odvozené formáty (SOAP, XML-RPC) Vrstvová architektura Description popis služby a protokolů nižší úrovně, které podporuje WSDL (Web Service Description Language), RDF (Resource Description Framework), DAML (DARPA Agent Markup Language) Discovery mechanismus získávání popisů služeb od poskytovatelů Universal Description, Discovery, and Integration (UDDI), Web Services Inspection Language (WS-Inspection), ebxml Registry (WS-Inspection) Webové služby a XML 9 Webové služby a XML 10 Simple Object Access Protocol SOAP = standardní protokol pro obalování zpráv sdílených mezi aplikacemi (obálka + sada pravidel pro reprezentaci dat v XML) Envelope Header Body Formy SOAP zpráv Remote Procedure Call (RPC) základ pro distribuované výpočty vzdálené volání podprogramu, předání parametrů a výsledku Electronic Document Interchange (EDI) základ pro automatizaci zpracování podnikových transakcí přenos a interpretace dokumentů Webové služby a XML 11 Webové služby a XML 12 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 3
Prostory jmen v XML (pozn.) prostředek pro rozlišení jmen značek a atributů z různých zdrojů prostor jmen je identifikován URI, např. http://cs.vsb.cz/katis jméno je tvořeno dvěma složkami názvem prostoru jmen a lokálním jménem implicitní prostor jmen bez prefixu Prostory jmen v XML <k:student xmlns:k="http://cs.vsb.cz/katis> <k:login>wal001</k:login> <k:jmeno>johnny</k:jmeno> <k:prijmeni>walker</k:prijmeni> </k:student> <Student xmlns="http://cs.vsb.cz/katis"> <login>wal001</login> <jmeno>johnny</jmeno> <prijmeni>walker</prijmeni> </Student> Webové služby a XML 13 Webové služby a XML 14 Příklad výměny zpráv <s:envelope xmlns:s="http://www.w3.org/2001/06/soap-envelope"> <s:header> <m:transaction xmlns:m="soap-transaction" s:mustunderstand="true"> <transactionid>1234</transaction> </m:transaction> </s:header> <s:body> <n:gettemp xmlns:n="urn:tempservice"> <city>ostrava</city> </gettemp> </s:body> </s:envelope> Webové služby a XML 15 Příklad výměny zpráv <s:envelope xmlns:s="http://www.w3.org/2001/06/soap-envelope"> <s:body> <n:gettempresponse xmlns:n="urn:tempservice"> <value xsi:type="xsd:float">12.4</value> </n:gettempresponse> </s:body> </s:envelope> Webové služby a XML 16 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 4
Příklad výměny zpráv <s:envelope> xmlns:s="http://www.w3.org/2001/06/soap-envelope"> <s:body> <s:fault> <faultcode>client.authentication</faultcode> <faultstring>invalid Credentials</faultstring> <details> <!--... --> </details> </s:fault> </s:body> </s:envelope> Implementace SOAP Dostupné pro většinu používaných jazyků Podpora vývojových prostředí Generování tříd obalujících zprávy Generování WSDL podle existujících tříd Java Apache SOAP, JAX-RPC.NET Zcela transparentní přístup Webové služby a XML 17 Webové služby a XML 18 Java a SOAP - klient import java.io.*; import java.net.*; import java.util.*; import org.apache.soap.*; import org.apache.soap.rpc.*; public class Example_client { public static void main(string[] args) throws Exception { // inicializace volání Call call = new Call(); call.settargetobjecturi("urn:tempservice"); call.setmethodname("gettemp"); call.setencodingstyleuri(constants.ns_uri_soap_enc); Java a SOAP - klient // sestavení vektoru parametrů Vector params = new Vector(); params.addelement( new Parameter("city", String.class, args[1], null)); call.setparams(params); // vlastní volání služby URL url = new URL (args[0]); Response resp = call.invoke(url, ""); Webové služby a XML 19 Webové služby a XML 20 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 5
Java a SOAP - klient // zpracování odpovědi if( resp.generatedfault()) { // nastala chyba Fault fault = resp.getfault(); System.out.println(fault.getFaultCode()); System.out.println(fault.getFaultString()); else { // v pořádku, máme výsledky Parameter result = resp.getreturnvalue(); System.out.print(result.getValue()); System.out.println(); PHP a SOAP - klient require "SoapRPC.php"; $soap = new SoapRPC(); $soap->setmethodname("gettemp"); $soap->settargetobjecturi("urn:tempservice"); $soap->addparameter( new SoapParameter("city", "Ostrava")); $res = $soap->call("http://.../server.php"); if( $soap->getfault() == "TRUE" ) die($soap->getfaultstring()); echo "$result"; Webové služby a XML 21 Webové služby a XML 22 PHP a SOAP - server require "SoapRPCServer.php"; function gettemp($city) { return 12.4; $srv = new SoapRPCServer(); $method = $srv->getmethodname(); $cmd = "\$vresponse = $method("; $params = &$srv->parameterlist; for( $i = 0; $i < count($params); $i++ ) { if( $i ) $cmd.= ","; $cmd.= "\"{$params[$i]\""; $cmd.= ");"; PHP a SOAP - server eval ($cmd); $srv->setmethodname($method. "Response"); $srv->resetparameter(); $srv->addparameter( new SoapParameter( "return", $vresponse, "String") ); $env = $srv->buildenvelope(); Header("Content-type: text/xml; encoding=iso-8859-2"); echo $env->marshall(); Webové služby a XML 23 Webové služby a XML 24 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 6
C# a SOAP - klient <%@ WebService Language="c#" Class="MyWebService" %> using System; using System.Web.Services; [WebService(Namespace="http://server/wsdl")] class MyWebService : WebService { [WebMethod] public string checklogin(string login, string pass) { return "Ahoj " + login; Java XML API Java API for XML Processing (JAXP) základní operace s XML (analýza SAX/DOM, transformace XSLT) Java API fro XML-based RPC (JAX-RPC) vzdálené volání procedur pomocí SOAP nad HTTP/HTTPS (webové služby) SOAP with Attachments API for Java (SAAJ) manipulace se SOAP zprávami JavaAPI for XML Registries (JAXR) přístup k registrům na bázi UDDI a ebxml (publikování a vyhledávání webových služeb) Webové služby a XML 25 Webové služby a XML 26 Menu Úloha pro cvičení Datum Jídlo Pořadí Popis Cena Kč Kapacita Seznam jídel v menze id datum, jídlo (s, o, v), pořadí popis cena * 100, kapacita Akce zobrazení seznamu zobrazení a editace položky zrušení položky 1. 2003-04-10 s 2. 2003-04-10 s 3. 2003-04-10 o 4. 2003-04-10 o 5. 2003-04-10 o 6. 2003-04-10 v 7. 2003-04-10 v 8. 2003-05-10 o Vložit další položku 1 2 1 2 3 1 2 1 Míchaná vajíčka na slanině, 2 rohlíky, čaj. Jablečný závin, kakao. Vepřová pečeně, knedlík, zelí Rybí filé, vařené brambory. Sojový guláš, chléb 2 ks. Smažený sýr, hranolky. Sýrová mísa, mléko, pečivo. Smažené krabí tyčinky, hranolky, zeleninová obloha. 10,50 12,30 20,10 23,80 11,50 23,10 12,30 30,00 500 400 700 500 600 300 200 100 Webové služby a XML 27 Webové služby a XML 28 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 7
MenuItem Oprava položky menu Datum: 2003-04-10 * ListMenuForm ListMenuAction ok Jídlo: Pořadí: Popis: Cena: Kapacita: Oběd 2 Rybí filé,vařenébrambory. 2380 500 DeleteMenuAction ReadMenuAction view MenuForm listmenu.jsp new SaveMenuAction save error Zapsat Webové služby a XML 29 viewmenu.jsp edit ReadMenuAction editmenu.jsp Webové služby a XML 30 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 8