Webové služby a XML Miroslav Beneš
Obsah přednášky 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 Webové služby a XML 3
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 4
Struktura aplikačního serveru aplikační program implementuje vlastní logiku aplikace (business logic) Service Listener komunikuje s okolím prostřednictvím některého transportního protokolu (HTTP, SOAP, Jabber,...) Service Proxy zprostředkovává dekódování požadavku, volání aplikačních funkcí, případně kódování odpovědi Webové služby a XML 5
Struktura aplikačního serveru klient aplikační program Service Proxy Service Listener klient Webové služby a XML 6
Architektura webových služeb 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 Webové služby a XML 7
Příklad aplikace využívající WS komponenta WSDL služba rozhraní UDDI adresář Vývojové prostředí SOAP / HTTP Java aplikace Webové služby a XML 8
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) Webové služby a XML 9
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 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 Webové služby a XML 11
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 12
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 Webové služby a XML 13
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 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
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> Webové služby a XML 17
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 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); Webové služby a XML 19
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 20
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(); } } } Webové služby a XML 21
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 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.= ");"; Webové služby a XML 23
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 24
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; } } Webové služby a XML 25
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 26
Úloha pro cvičení 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 Webové služby a XML 27
Menu Datum Jídlo Pořadí Popis Cena Kč Kapacita 1. 2003-04-10 s 1 Míchaná vajíčka na slanině, 2 rohlíky, čaj. 10,50 500 2. 2003-04-10 s 2 Jablečný závin, kakao. 12,30 400 3. 2003-04-10 o 1 Vepřová pečeně, knedlík, zelí 20,10 700 4. 2003-04-10 o 2 Rybí filé, vařené brambory. 23,80 500 5. 2003-04-10 o 3 Sojový guláš, chléb 2 ks. 11,50 600 6. 2003-04-10 v 1 Smažený sýr, hranolky. 23,10 300 7. 2003-04-10 v 2 Sýrová mísa, mléko, pečivo. 12,30 200 8. 2003-05-10 o 1 Smažené krabí tyčinky, hranolky, zeleninová obloha. 30,00 100 Vložit další položku Webové služby a XML 28
Oprava položky menu Datum: Jídlo: Pořadí: Popis: Cena: Kapacita: 2003-04-10 Oběd 2 Rybífilé,vařenébrambory. 2380 500 Zapsat Webové služby a XML 29
MenuItem * ListMenuForm ListMenuAction ok DeleteMenuAction view listmenu.jsp SaveMenuAction ReadMenuAction MenuForm new save error viewmenu.jsp edit ReadMenuAction editmenu.jsp Webové služby a XML 30