Webové služby a XML Miroslav Beneš
Obsah přednášky z z z z z z
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 z
rozhraní k aplikaci dostupné prostřednictvím počítačové sítě, založené na standardních internetových technologiích
z
je-li aplikace dostupná přes síť pomocí kombinace protokolů jako HTTP, XML, SMTP, nebo Jabber, je to webová služba
z
vrstva abstrakce mezi aplikačním programem a klientem Webové služby a XML
3
Co jsou to webové služby z
funkčnost služby není závislá na tom, v jakém jazyce je klient nebo server implementován (Java, C++, PHP, C#, ...)
z
příklad: HTML stránky: aplikace=WWW server, klient=prohlížeč
z
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 z
aplikační program – implementuje vlastní logiku aplikace (business logic)
z
Service Listener – komunikuje s okolím prostřednictvím některého transportního protokolu (HTTP, SOAP, Jabber, ...)
z
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 z
Just-In-Time Integration z
z
z
poskytovatel služby z
z
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 publikuje popis svých služeb v registru služeb
spotřebitel služby z
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í
Java
SOAP / HTTP
aplikace Webové služby a XML
8
Vrstvová architektura z
Network z
z
Transport z
z
základní komunikace, adresování, směrování, totéž jako síťová vrstva TCP/IP 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 z
z
„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 z
Description z z
z
popis služby a protokolů nižší úrovně, které podporuje WSDL (Web Service Description Language), RDF (Resource Description Framework), DAML (DARPA Agent Markup Language)
Discovery z z
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 z
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 z
Remote Procedure Call (RPC) z z
z
základ pro distribuované výpočty vzdálené volání podprogramu, předání parametrů a výsledku
Electronic Document Interchange (EDI) z
z
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.) z
z
z
z
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
wal001 <jmeno>Johnny <prijmeni>Walker
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"> 1234 <s:Body> Ostrava 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> 12.4
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> Client.Authentication Invalid Credentials <details> Webové služby a XML
17
Implementace SOAP z z
Dostupné pro většinu používaných jazyků Podpora vývojových prostředí z z
z
Java z
z
Generování tříd obalujících zprávy Generování WSDL podle existujících tříd Apache SOAP, JAX-RPC
.NET z
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-88592"); 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 z
Java API for XML Processing (JAXP) z
z
Java API fro XML-based RPC (JAX-RPC) z
z
vzdálené volání procedur pomocí SOAP nad HTTP/HTTPS (webové služby)
SOAP with Attachments API for Java (SAAJ) z
z
základní operace s XML (analýza SAX/DOM, transformace XSLT)
manipulace se SOAP zprávami
JavaAPI for XML Registries (JAXR) z
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í z
Seznam jídel v menze z z z z
z
id datum, jídlo (s, o, v), pořadí popis cena * 100, kapacita
Akce z z z
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:
2003-04-10
Jídlo:
Oběd
Pořadí:
2
Popis:
Rybí filé,vařenébrambory.
Cena:
2380
Kapacita:
500 Z ap sat
Webové služby a XML
29
MenuItem ListMenuAction * ListMenuForm
ok
listMenu.jsp DeleteMenuAction
SaveMenuAction
view
ReadMenuAction new MenuForm
viewMenu.jsp
ReadMenuAction edit
Webové služby a XML
error save
editMenu.jsp 30