Wielowarstwowe aplikacje internetowe Web Services Plan wykładu Wprowadzenie do technologii Web Services Architektura Web Services Protokół komunikacyjny SOAP Język opisu interfejsu WSDL Rejestr UDDI JavaServer Faces (JSF) Technologia Web Services Web Services a WWW Rozproszone komponenty usługowe Samodokumentujące się Niezależne od języka programowania Rejestrowane Odkrywane Web Service Oparta na: SOAP WSDL UDDI Interfejs (WSDL) komunikacja (SOAP) opublikowanie Katalog serwisów (UDDI) HTML HTTP XML HTTP Web Service Warstwa prezentacji Warstwa logiki biznesowej Baza danych Interfejs (WSDL) Klient wyszukanie Serwer aplikacji
Zastosowania Web Services Komponenty aplikacji do wielokrotnego wykorzystania: konwersja walut weryfikacja poprawności numeru karty kredytowej prognoza pogody tłumaczenia... Integracja istniejącego oprogramowania interoperability wymiana danych między różnymi aplikacjami, implementowanymi w różnych technologiach na różnych platformach Architektura zorientowana na usługi (SOA) SOA = Service-Oriented Architecture Architektura umożliwiająca tworzenie rozproszonych aplikacji z luźno powiązanych komponentów Obejmuje: usługi elementy logiki biznesowej, dobrze zdefiniowane, niezależne od kontekstu i stanu innych usług powiązania połączenia między usługami SOA dawniej implementowane w oparciu o ORB/DCOM SOA obecnie oparte najczęściej na Web Services Architektura Web Services Protokół SOAP klient Web Service call p1(2,5) serializacja wywołań deserializacja wyników komponent Web Service function p1(a,b) function p1(a,b) function p1(a,b) Pierwotnie: Simple Object Access Protocol (SOAP) Protokół komunikacyjny oparty na XML Struktura komunikatu SOAP <Envelope> <Header> <Body> <Fault>...<p1> <a>2</a> <b>5</b> </p>... komunikat SOAP wyślij żądanie sieciowe Internet deserializacja wywołań serializacja wyników serwer aplikacji HTTP...<p1> <a>2</a> <b>5</b> </p>... Tryby wywołań RPC zawsze synchroniczne dokumentowy synchroniczne lub asynchroniczne
Przykładowe żądanie SOAP Przykładowa odpowiedź SOAP <?xml version="1.0"?> <soap:envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingstyle="http://www.w3.org/2001/12/soap-encoding"> <?xml version="1.0"?> <soap:envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingstyle="http://www.w3.org/2001/12/soap-encoding"> <soap:body xmlns:m="demo"> <m:multiply> <m:val1>3</m:val1> <m:val2>2</m:val2> </m:multiply> </soap:body> </soap:envelope> wywołanie zdalnej usługi <soap:body xmlns:m="demo"> <m:multiplyresponse> <m:result>6</m:result> </m:multiplyresponse> </soap:body> </soap:envelope> przekazanie wyniku zdalnej usługi Implementacja klienta Web Services Język WSDL Call call = new Call(); call.settargetobjecturi("demo"); call.setmethodname("multiply"); call.setencodingstyleuri(constants.ns_uri_soap_enc); Vector params = new Vector(); params.addelement(new Parameter("val1",Integer.class,2,null)); params.addelement(new Parameter("val2",Integer.class,3,null)); call.setparams(params); Response resp = call.invoke(new URL("http://poznan/demo"),""); Web Services Description Language Opis interfejsu komponentu Web Service Automatyczne generowanie kodu źródłowego klienta Web Service Język znaczników XML <definitions> <service> <service> <port> <port> <binding> <operation> <operation> <porttype> <operation> <operation> Parameter ret = resp.getreturnvalue(); Object value = ret.getvalue(); <input> <input> System.out.println(value); <output> <output>
Przykładowy dokument WSDL (1/2) Przykładowy dokument WSDL (2/2) <definitions name="demo"...> <message name="multiply0request"> <part name="val1" type="xsd:int"/> <part name="val2" type="xsd:int"/> </message> <message name="multiply0response"> <part name="return" type="xsd:int"/> </message> <porttype name="demoporttype"> <operation name="multiply"> <input name="multiply0request" message="tns:multiply0request"/> <output name="multiply0response" message="tns:multiply0response"/> </operation> </porttype>...... <binding name="demobinding" type="tns:demoporttype"> <soap:binding style="rpc".../> <operation name="multiply"> <input name="multiply0request">... </input> <output name="multiply0response">... </output> </operation> </binding> <service name="http://miner/demo"> <port name="demoport" binding="tns:demobinding"> <soap:address location="http://poznan/demo"/> </port> </service> </definitions> Rejestr UDDI Universal Description, Discovery, and Integration Specjalizowana baza danych Trzy poziomy opisu komponentów White Pages Yelow Pages Green Pages rejestracja usługi JAXR-API UDDI JAXR-API wyszukanie usługi Zestaw programisty Java Java API for XML-based RPC (JAX-RPC) Java API for XML-based Web Services (JAX-WS) SOAP with Attachments API for Java (SAAJ) Java API for XML Processing (JAXP) Java API for XML Messaging (JAXM) Java API for XML Registries (JAXR) Java Architecture for XML Binding (JAXB) komponent JAX-RPC wywołanie usługi klient
Podejścia do tworzenia Web Services Bottom-up w oparciu o istniejące komponenty Np. klasy, sesyjne bezstanowe EJB, zapytania SQL, procedury składowane podejście niewymagające biegłej znajomości WSDL i XML Schema Top-down punktem wyjścia jest przygotowanie pliku WSDL (ewentualnie wcześniej schematów XML opisujących przesyłane wiadomości) umożliwia zrównoleglenie prac nad implementacją serwisu i klienta Web Services standardy uzupełniające WS-Security WS-Reliability WS-ReliableMessaging WS-Adressing WS-Transaction WS-Interoperability... Web Services Metadata w Java EE Web Services Metadata - przykład Tworzenie Web Services poprzez oznaczenie klas Java lub EJB odpowiednimi adnotacjami: @WebService @WebMethod @WebParam @WebResult @SOAPBinding import javax.ejb.stateless; import javax.jws.webmethod; import javax.jws.webservice; @Stateless @WebService public class MnozenieBean { MnozenieBean.java public MnozenieBean() {} } @WebMethod public int mnoz(int p1, int p2) { return p1 * p2; }
Implementacja klienta Web Service w praktyce Generacja klasy proxy w IDE (1/3) Do utworzenia klienta Web Service nie jest niezbędna znajomość SOAP ani interfejsów programistycznych związanych z technologią Web Services W praktyce korzysta się z narzędzi, które w oparciu o WSDL generują klasę proxy pośredniczącą w komunikacji z komponentem Web Service, udostępniającą funkcjonalność serwisu w formie metod lokalnego obiektu, ukrywającą szczegóły komunikacji. WSDL2java http://www.poznan.pl/webservices/mnozenie.wsdl Generacja klasy proxy w IDE (2/3) Generacja klasy proxy w IDE (3/3)
Web Services w Microsoft.NET Implementowane w ASP.NET klasy opisane specjalnymi atrybutami Witryna i klient Web Services w.net Witryna Web Service <%@ WebService Language="C#" Class="MnozenieWS"%> using System; using System.Web; using System.Web.Services; Mnozenie.asmx [WebService(Namespace="http://www.poznan.pl/webservices")] public class MnozenieWS { [WebMethod(Description="Mnozenie dwoch liczb calkowitych")] public int mnoz(int p1, int p2) { return p1 * p2; } } Tworzenie klasy proxy dla klienta Web Service wsdl http://www.poznan.pl/webservices/mnozenie.asmx?wsdl Rozwiązania alternatywne dla SOAP REST (Representational State Transfer) tzw. RESTful Web Services interfejs komponentu Web Service w formie URI dostępnych poprzez operacje GET, POST, PUT, DELETE, itd. protokołu HTTP komunikaty w formie zwykłych dokumentów XML WSIF (Web Services Invocation Framework) elastyczny sposób wywoływania serwisów opisanych w WSDL (SOAP, EJB, klasa lokalna) możliwość dynamicznych wywołań REST (Representational State Transfer) Architektoniczny styl tworzenia oprogramowania dla rozproszonych systemów hipermedialnych nie tylko Web Services Kolekcja zasad dotyczących tworzenia i adresacji zasobów Zasób (ang. resource) jako centralne pojęcie abstrakcja stanu i funkcjonalności aplikacji każdy zasób ma unikalny adres o uniwersalnej składni stosowanej dla hiperlinków (URI w HTTP) jednolity interfejs do transferu stanu między klientem i zasobem (wymieniane są reprezentacje zasobów) Interfejs do transmisji danych poprzez HTTP bez dodatkowej warstwy komunikacyjnej i śledzenia sesji
RESTful Web Services RESTful Web Service - Przykład Usługi sieciowe implementowane w oparciu o HTTP i zbiór zasad REST Web Service jako kolekcja zasobów 3 aspekty definicji serwisu: adres URI (np. http://myservice.com/resources/products, http://myservice.com/resources/products/p12345) typ MIME obsługiwanych danych (np. XML, JSON) zbiór obsługiwanych operacji w postaci metod (rozkazów) HTTP (POST, GET, PUT, DELETE) http://myservice.com/resources/products GET pobranie listy produktów POST dodanie nowego produktu PUT podmiana całej kolekcji produktów (nietypowe) DELETE usunięcie całej kolekcji produktów (nietypowe) http://myservice.com/resources/products/p12345 GET pobranie konkretnego produktu POST (nieużywane) PUT modyfikacja konkretnego produktu DELETE usunięcie konkretnego produktu Podsumowanie Architektura zorientowana na usługi Kanony implementacji środowisk Web Services Interfejsy programistyczne dla języka Java Tworzenie usług i klientów na platformach Java i.net RESTful Web Services Materiały dodatkowe "Web Services Activity", http://www.w3.org/2002/ws "Web Services and Other Distributed Technologies", http://msdn.microsoft.com/webservices/ "SOA and Web Services", http://www- 128.ibm.com/developerworks/webservices "XMethods", http://www.xmethods.net/ "XMethods", http://www.xmethods.net/ "Java Technology and Web Services", http://java.sun.com/webservices/ "Web Services Project @ Apache", http://ws.apache.org/