Hybrydowe aplikacje webowe

Podobne dokumenty
Architektura chmur i wirtualizacja. Wykład 7 Mashups hybrydowe aplikacje webowe

Wybrane działy Informatyki Stosowanej

Programowanie w języku Java. Wykład 13: Java Platform, Enterprise Edition (Java EE)

1 Wprowadzenie do J2EE

Programowanie Komponentowe WebAPI

Wprowadzenie do technologii Web Services: SOAP, WSDL i UDDI

Protokół HTTP. 1. Protokół HTTP, usługi www, model request-response (żądanie-odpowiedź), przekazywanie argumentów, AJAX.

Czym jest AJAX. AJAX wprowadzenie. Obiekt XMLHttpRequest (XHR) Niezbędne narzędzia. Standardowy XHR. XHR z obsługą baz danych

Typy przetwarzania. Przetwarzanie zcentralizowane. Przetwarzanie rozproszone

Wybrane działy Informatyki Stosowanej

Dostęp do komponentów EJB przez usługi Web Services

Java Enterprise Edition spotkanie nr 1. Sprawy organizacyjne, wprowadzenie

Architektury Usług Internetowych. Laboratorium 2 RESTful Web Services

EJB 3.0 (Enterprise JavaBeans 3.0)

Podstawy programowania w języku JavaScript

Enterprise JavaBeans

Tworzenie stron internetowych z wykorzystaniem HTM5, JavaScript, CSS3 i jquery. Łukasz Bartczuk

Web Services. Wojciech Mazur. 17 marca Politechnika Wrocławska Wydział Informatyki i Zarządzania

Plan wykładu. 1. Protokół FTP. 2. Protokół HTTP, usługi www, model request-response (żądanie-odpowiedź), przekazywanie argumentów, AJAX.

Wstęp Budowa Serwlety JSP Podsumowanie. Tomcat. Kotwasiński. 1 grudnia 2008

Zaawansowane aplikacje internetowe

Rozproszone systemy Internetowe

Wykład dla studentów Informatyki Stosowanej UJ 2012/2013

Serwery aplikacji. mgr Radosław Matusik. Wydział Matematyki i Informatyki Uniwersytetu Łódzkiego radmat radmat@math.uni.lodz.

JAX-RS czyli REST w Javie. Adam Kędziora

Usługi sieciowe (Web Services)

Komunikacja międzysystemowa

OpenLaszlo. OpenLaszlo

Aplikacje WWW Wprowadzenie

mgr inż. Michał Paluch

Wybrane działy Informatyki Stosowanej

Komunikacja i wymiana danych

Flex 3. Piotr Strzelczyk Wydział EAIiE Katedra Automatyki. Kraków, 2008

Programowanie w Internecie

Java Server Faces - wprowadzenie

A Zasady współpracy. Ocena rozwiązań punktów punktów punktów punktów punktów

Automatyzacja procesów biznesowych Andrzej Sobecki. ESB Enterprise service bus

Enterprise JavaBeans. 1. Architektura EJB: komponenty encyjne, komponenty sesyjne, komponenty sterowane komunikatami. 2. Kontenery EJB JBoss.

Wybrane działy Informatyki Stosowanej

Zaawansowane aplikacje internetowe. Wykład 6. Wprowadzenie do Web Services. wykład prowadzi: Maciej Zakrzewicz. Web Services

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

JAVA EE MODEL APLIKACJI. Waldemar Korłub. Narzędzia i aplikacje Java EE KASK ETI Politechnika Gdańska

5.14 JSP - Przykład z obiektami sesji Podsumowanie Słownik Zadanie... 86

AJAX. Wykonał: Marcin Ziółkowski, AGH Kraków, AiR rok 5.

Web Services / Gridy

SOP System Obsługi Parkingów

Wybrane działy Informatyki Stosowanej

Wywoływanie metod zdalnych

Paweł Rajba,

Programowanie komponentowe 5

Aplikacje internetowe i rozproszone - laboratorium

Usługi sieciowe REST. Instytut Informatyki Politechnika Poznańska

Technologie dla aplikacji klasy enterprise. Wprowadzenie. Marek Wojciechowski

Wprowadzenie do J2EE. Maciej Zakrzewicz.

Przykłady tworzenia aplikacji komponentowych w technologii JavaServer Faces 2.1 na podstawie

Dokumentacja wstępna TIN. Rozproszone repozytorium oparte o WebDAV

Języki programowania wysokiego poziomu WWW

Źródła. cript/1.5/reference/ Ruby on Rails: AJAX: ssays/archives/

Aplikacje RMI

Systemy internetowe. Wykład 5 Architektura WWW. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

PROJEKTOWANIE APLIKACJI INTERNETOWYCH

Enterprise JavaBeans (EJB)

Podejście obiektowe do budowy systemów rozproszonych

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Aplikacje webowe z wykorzystaniem Node.js oraz Express

Uniwersytet Łódzki Wydział Matematyki i Informatyki, Katedra Analizy Nieliniowej. Wstęp. Programowanie w Javie 2. mgr inż.

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Wprowadzenie SYSTEMY SIECIOWE. Michał Simiński

Pogadanka o czymś, co niektórzy nazywają AJAX

Budowa aplikacji w technologii. Enterprise JavaBeans. Maciej Zakrzewicz PLOUG

Technologie internetowe

Programowanie w Sieci Internet filtry oraz web.xml. Kraków, 11 stycznia 2013 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Elementy JEE. 1. Wprowadzenie. 2. Prerekwizyty. 3. Pierwszy servlet. obsługa parametrów żądań 4. JavaServer Pages.

Spring Web MVC, Spring DI

Programowanie komponentowe

Contexts and Dependency Injection (CDI) Autor wykładu: Marek Wojciechowski

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

TOPIT Załącznik nr 3 Programowanie aplikacji internetowych

Podejście obiektowe do budowy systemów rozproszonych

Plan wykładu. Technologia Web Services. Web Services a WWW

Wielowarstwowe aplikacje internetowe. Web Services. Autorzy wykładu: Maciej Zakrzewicz Marek Wojciechowski. Web Services

Aplikacje Internetowe, Servlety, JSP i JDBC

Remote Method Invocation 17 listopada 2010

Plan prezentacji. Budowa aplikacji w technologii Enterprise JavaBeans. Przegląd architektur: CORBA. Cele budowy aplikacji rozproszonych

Specyfikacja techniczna. mprofi Interfejs API

Katedra Architektury Systemów Komputerowych Wydział Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej

Wywoływanie metod zdalnych

Architektury Usług Internetowych. Laboratorium 2. Usługi sieciowe

Architektury Usług Internetowych. Laboratorium 1 Servlety

Forum Client - Spring in Swing

Wybrane działy Informatyki Stosowanej

Program szkolenia: REST i Microservices w PHP

Specyfikacja interfejsów usług Jednolitego Pliku Kontrolnego

Programowanie obiektowe

Gerard Frankowski, Zespół Bezpieczeństwa PCSS. Nowoczesne technologie bliżej nas Poznań,

Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione

Programowanie komponentowe. Przykład 1 Bezpieczeństwo wg The Java EE 5 Tutorial Autor: Zofia Kruczkiewicz

Zagadnienia projektowania aplikacji J2EE

Transkrypt:

Hybrydowe aplikacje webowe

Aplikacje webowe klasyczne i mashups Architektura Technologie 2

Etap zero: Document- centric, statyczny Etap (- )1 Pojawiają się języki skryptowe, applety Java Wodotryski wykonywane po stronie klienta Etap 2 Powiązania z bazą danych dostęp do aplikacji za pomocą przeglądarki Etap 3 Dołączanie semantyki do danych (XML) Rozpraszanie przetwarzania Etap 4 Asynchroniczna komunikacja (Ajax) Rich Internet Applications (RIA) on- screen- applications Adobe Flash, Adobe Air, GWT, Microsoft Silverlight, JavaFX, Web 2.0 Etap 5 Mashup Etap Cloud Computing? 3

HTML, JavaScript, CSS, DOM, Ajax, Action Script, PHP, Java,.NET, Python, Ruby, Groovy, XSLT, Perl, Protokoły: HTTP, SOAP, REST, Atom, RSS, Formaty: HTML, XML, JSON, 4

Java Platform, Enterprise Edition Platforma programowania po stronie serwera w języku Java Uzupełnia platformę Java SE o biblioteki umożliwiające budowanie aplikacji: wielowarstwowych, rozproszonych, odpornych na awarie Które bazują na komponentach działających w obrębie Serwera aplikacji Zdefiniowana jako specyfikacja 6

W ramach JEE istnieje wiele specyfikacji API JDBC (Java Database Conectivity), RMI (Remote Method Invocation), JMS (Java Message Service), WS (Web Services), XML EJB (Enterprise Java Bean), servlet, portlet, JSP (Java Server Pages), JSF (Java Server Faces), JPA (Java Persistence API), JTA (Java Transaction API) CDI (Context and Dependency Injection) 7

Całość specyfikacji GlassFish (GlassFish Community) JBoss (Red Hat) Oracle WebLogic (Oracle) Apache Geronimo (Apache Software Foundation) IBM WebSphere (IBM) ColdFusion (Adobe) Kontenery webowe (servletów) Apache Tomcat (Apache Software Foundation) Jetty (Eclipse Foundation) 8

9

Plik WAR (web archive) Deployment descriptor 10

Kontener tworzy instancję servletu (przy pierwszym odwołaniu lub przy starcie) Konfiguracja ładowana z pliku web.xml Jedna instancja servletu współdzielona przez klientów Request uruchamia metodę service(), która wywołuje metodę dopost() lub doget() Pomiędzy kontenerem a servletem mogą znajdować się filtry (transformacja requestu) Servlet może przekazać request innemu servletowi (forward) Servlet tworzy obiekt odpowiedzi (response) Podczas usuwanie servletu wołana jest metoda destroy() 11

12

<servlet> <servlet-name>securityservlet</servlet-name> <servlet-class>pl.lodz.p.kis.ksoir.servlet.securityservlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>securityservlet</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> <servlet> <servlet-name>imageservlet</servlet-name> <servlet-class>pl.lodz.p.kis.ksoir.servlet.imageservlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>imageservlet</servlet-name> <url-pattern>/images/*</url-pattern> </servlet-mapping> 13

Aplikacja oparta o servlet może korzystać z innych technologii (API), niekoniecznie związanych z API definiowanymi w ramach JEE. Mechanizmy generacji widoku np. JSP, JSF - > Apache Struts, Apache Wicket, Spring MVC Mechanizmy implementacji modelu EJB - > Spring Framework Servlet może do generowania widoku użyć np. JSP, robiąc do niego forward requestu 14

15

Cykl życia aplikacji webowej Opracowanie kodu komponentu Opracowanie deskryptora rozmieszczenia (deployment) Kompilacja aplikacji Pakowanie kodu aplikacji (WAR) Rozmieszczenie na serwerze aplikacji Dostęp z wykorzystaniem URL 16

RFC 2616 Komunikaty HTTP- message = Request Response Request (żądanie) Method Request- URI HTTP- Version Response (odpowiedź) HTTP- Version Status- Code Reason- Phrase 18

Metody żądania (request): OPTIONS HEAD GET PUT POST DELETE TRACE CONNECT 19

GET pobieranie danych wskazywanych przez Request- URI implementacja nie powinna generować efektów ubocznych 20

POST informuje serwer, że dane zawarte w komunikacie powinny zostać dodane jako pod- zasób w stosunku do zasobu wskazywanego przez Request- URI (jak plik w stosunku do katalogu). POST miał w swoim zamyśle być jednolitą metodą dla operacji typu: Adnotowanie istniejących zasobów, Wysłanie wiadomości do forum, grupy/listy dyskusyjnej, itp. Przesłanie bloku danych (przesłanie formularza) do procesu obsługi Dodanie rekordu do bazy danych 21

PUT Informuje serwer, że zawarte dane powinny być zachowane pod wskazanym URI (referencja?). Jeśli identyfikator Request- URI odnosi się do zasobów już istniejących, przesłane dane należy uznać za ich zmodyfikowaną wersję. Jeśli Request- URI nie wskazuje na istniejący zasób, oraz URI może zostać zdefiniowane jako nowy zasób, serwer może utworzyć zasób z przesłanym URI 22

DELETE Żądanie usunięcia zasobu wskazywanego przez Request- URI Klient nie ma gwarancji usunięcia, pomimo potwierdzenie sukcesu przez serwer odpowiednim kodem statusu 23

POST vs. PUT Wg RFC 2616 podstawowa różnica pomiędzy POST a PUT związana jest ze znaczeniem URI Request- URI w metodzie POST identyfikuje zasób, który obsługuje załączone dane. Zasobem może być np. proces, protokół,. Dane są parametrem zasobu (np. metody). Request- URI w metodzie PUT identyfikuje sam zasób (którego dane są przesłane w komunikacie). Serwer nie może zastosować tego komunikatu do innych danych niż wskazywane przez Request- URI. 24

Aplikacja może samodzielnie decydować, jak reaguje na poszczególne metody żądania, zachowując się wbrew zaleceniom zawartym w RFC 2616 25

HTTP jest bezstanowy GET - > otwórz połączenie, pobierz dane, porzuć połączenie Sesja nie jest częścią specyfikacji HTTP, jednak aplikacje webowe nie mogą pracować w sposób bezstanowy: Aplikacje webowe muszą zarządzać sesją (np. koszyk w sklepie internetowym) Sesja przechowywana na serwerze (obiekty sesji, baza danych długie sesje) Sesja przechowywana na kliencie (ciasteczka, ukryte pola formularza) 26

Aplikacja webowa łącząca dane, kod i inną zawartość z różnorodnych źródeł w integralną całość W czystej postaci mashup wykonywany jest całkowicie na kliencie (client- side mashup), jednak możliwa jest także integracja po stronie serwera (server- side mashup) 28

2. Pobranie danych 1. Żądanie 4. Odpowiedź Utrzymywanie własnych baz danych dla wszystkich usług składowych 3. Przetwarzanie Wszystkie usługi hostowane lokalnie (i zazwyczaj napisane samodzielnie) Kompletny kod strony (HTML) w końcowej postaci 29

Minimalna liczba własnych usług (optymalnie - brak) Przeglądarka (klient) komunikuje się z dostawcami usług 3a. 1. Żądanie 3b. 2. Odpowiedź 3c. Podstawowy HTML zawierający fragmenty JS odpowiedzialne za komunikację z usługami zewnętrznymi Odpowiedzi zawierają dane przetwarzane przez JS na kliencie lub dynamicznie budowane skrypty JS odpowiedzialne za dalsze akcje 30

2a. Część usług jest integrowana już po stronie serwera (kwestie bezpieczeństwa, ukrycia implementacji, CORS, ) 1. Żądanie 4a. 4b. 3. Odpowiedź 2b. Kod strony może być całkowicie kompletny lub odwoływać się przez JS do kolejnych usług 4c. 31

Mashupy serwerowe są znacznie prostsze w implementacji w porównaniu z klienckimi Aspekty prawne i licencyjne Z własnej woli oddajemy swoje dane stronom trzecim, nie mając informacji dotyczących ich bezpieczeństwa i składowania Często dostęp do danych niemożliwy poza interfejsami webowymi 32

Podstawowe ograniczenie stanowi polityka jednego źródła (same origin policy) Ograniczenie wynikające z reguł bezpieczeństwa w klientach HTTP (głównie chodzi o historię i cookies), uniemożliwiając łączenie klienta z zasobami znajdującymi się na innych serwerach 33

Przykładowy adres strony: http://www.example.com/dir/page.html URL Wynik Powód http://www.example.com/dir/page.html OK Ten sam host, port I protokół http://www.example.com/dir2/other.html OK Ten sam host, port I protokół http://www.example.com:81/dir/other.html BŁĄD Inny port https://www.example.com/dir/other.html BŁĄD Inny protokół http://en.example.com/dir/other.html BŁĄD Inny host http://example.com/dir/other.html BŁĄD Inny host http://v2.www.example.com/dir/other.html BŁĄD Inny host 34

CORS (cross- origin resource sharing) Dołączanie do odpowiedzi HTTP specjalnego nagłówka Access- Control- Allow- Origin Może zawierać listę dozwolonych domen lub pozwalać na wszystkie (*) Obsługa nagłówka nie jest zaimplementowana w starszych przeglądarkach 35

Własność document.domain Jeżeli dwie ramki (okna) zawierają JavaScript określające tę samą domenę, reguła zostaje zniesiona Na przykład, współpracujące skrypty załadowane z hostów orders.example.com i catalog.example.com mogą określić wspólną domenę na example.com Sposób użycia ukryty iframe osadzony na stronie 36

Cross- document messaging Skrypty z oddzielnych ramek mogą wysyłać do siebie komunikaty poprzez Window.postMessage() Skrypt nasłuchujący musi subskrybować zdarzenia obiektu Window poprzez handler onmessage Skrypty nadal nie mogą odczytywać własności drugiej ramki Sposób użycia ukryty iframe osadzony na stronie 37

JSONP (JSON with padding) Ograniczenie polityki jednego źródła nie dotyczy znacznika <script> przeglądarka może korzystać ze statycznych zasobów (skrypty, obrazki, CSS) znajdujących się na różnych maszynach Wynik działania zdalnego skryptu to JSON opakowany w funkcję dostępną na kliencie Dzięki obsłudze DOM przez JS, takie skrypty mogą być wstrzykiwane na stronę dynamicznie Działa wyłącznie z HTTP GET 38

Asynchronous JavaScript and XML Pozwala klientom na asynchroniczne wysyłanie i pobieranie danych Komunikacja strony z serwerem przebiega w tle, nie wpływając na jej odbiór przez użytkownika 40

Zalety Osiągnięcie bardziej dynamicznej interakcji bez konieczności przeładowywania całej strony internetowej Kod skryptowy po stronie klienta może zostać wykorzystany do pobierania danych z serwera poprzez API, bez konieczności przeładowywania całej strony 41

Wady i problemy Problem z historią przeglądarki (kiedy cała strona ładowana jest dynamicznie, np. przez Dojo) Zakładki (kiedy cała strona ładowana jest dynamicznie, np. przez Dojo) Zależności czasowe Indeksowanie Możliwy brak obsługi JavaScript w przeglądarce Polityka tego samego źródła (same origin policy) Zwiększenie liczby requestów JAWS - Job Access With Speech 42

System synchroniczny System asynchroniczny 43

44

Do komunikacji używany jest obiekt XMLHttpRequest (XHR) XMLHttpRequest podlega same origin policy Wbrew nazwie (wynikającej z początkowych założeń standardu), AJAX pozwala na użycie innych tekstowych formatów danych, np. JSON, HTML, plain text 45

Dostęp do obiektu: function gethttprequest() { var xhr = null; if (window.xmlhttprequest) { // normalne przeglądarki xhr = new XMLHttpRequest(); } else if (window.activexobject) { // IE < 7 try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { alert("your browser does not support Ajax."); } } } if (xhr.overridemimetype) { xhr.overridemimetype("text/xml"); } // możliwość wymuszenia typu MIME } return xhr; 46

Wysłanie żądania: var xhr = gethttprequest(); var url = "http://my.host/my/service/url"; var async = true; var postcontent = param1=value1&param2=value2&... ; xhr.open("post", url, async); // dozwolone inne metody HTTP xhr.setrequestheader("content-type", "application/x-www-form-urlencoded"); // xhr.setrequestheader("nazwa", "wartość"); - nagłówki w miarę potrzeby xhr.send(postcontent); xhr.onreadystatechange = function() { try { if (xhr.readystate == 4) { if (xhr.status == 200) { // mamy odpowiedź, możemy jej użyć } else { // inny kod odpowiedzi HTTP co się stało? } } } catch (exception) { // obsługa błędu } } 47

Własności XMLHttpRequest: readystate status żądania (od 0 do 4), responsetext tekst odpowiedzi (plain text), responsexml obiekt XML sparsowanej odpowiedzi (responsetext musi być prawidłowym XML), status kod odpowiedzi HTTP (np. 404), statustext opis statusu HTTP (np. not found ) 48

http://api.jquery.com/jquery.ajax/ Uproszczone metody HTTP: http://api.jquery.com/jquery.get/ http://api.jquery.com/jquery.post/ 49

http://dojotoolkit.org/reference- guide/1.8/ dojo/xhr.html Uproszczone metody HTTP: http://dojotoolkit.org/reference- guide/1.8/dojo/ xhrget.html#dojo- xhrget http://dojotoolkit.org/reference- guide/1.8/dojo/ xhrpost.html#dojo- xhrpost 50

JavaScript Object Notation Standardowy format tekstowego zapisu obiektów w JavaScript Dostęp do zawartości znacznie łatwiejszy niż w przypadku XML (bezpośrednia konwersja tekstu do obiektu): JSON.parse(xhr.responseText); 52

var person = { "firstname": "John", "lastname": "Smith", "age": 25, "address": { "streetaddress": "21 2nd Street", "city": "New York", "state": "NY", "postalcode": "10021" }, "phonenumber": [ { "type": "home", "number": "212 555-1234" }, { "type": "fax", "number": "646 555-4567" } ] }; <person> <firstname>john</firstname> <lastname>smith</lastname> <age>25</age> <address> <streetaddress>21 2nd Street</streetAddress> <city>new York</city> <state>ny</state> <postalcode>10021</postalcode> </address> <phonenumbers> <phonenumber type="home">212 555-1234</phoneNumber> <phonenumber type="fax">646 555-4567</phoneNumber> </phonenumbers> </person> lub: <person firstname="john" lastname="smith" age="25"> <address streetaddress="21 2nd Street" city="new York" state="ny" postalcode="10021" /> <phonenumbers> <phonenumber type="home" number="212 555-1234"/> <phonenumber type="fax" number="646 555-4567"/> </phonenumbers> </person> 53

var person = { "firstname": "John", "lastname": "Smith", "age": 25, "address": { "streetaddress": "21 2nd Street", "city": "New York", "state": "NY", "postalcode": "10021" }, "phonenumber": [ { "type": "home", "number": "212 555-1234" }, { "type": "fax", "number": "646 555-4567" } ] }; var firstname = person.firstname; // lub person["firstname"] var homephone = person.phonenumber[0].number; // lub person["phonenumber ][0]["number ] 54

Web services Niezależna od platformy metoda komunikacji między urządzeniami lub programami Standard W3C WSDL (Web Services Description Language) UDDI (Universal Description Discovery and Integration) 56

Simple Object Access Protocol Używa formatu XML i protokołu warstwy aplikacji (np. HTTP lub SMTP) Wysłużony i ciężki w użyciu standard (np. konieczność ciągłego utrzymywania WSDL zgodnego z kodem) POST /InStock HTTP/1.1 Host: www.example.org Content-Type: application/soap+xml; charset=utf-8 Content-Length: nnn <?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="http://www.example.org/stock"> <m:getstockprice> <m:stockname>ibm</m:stockname> </m:getstockprice> </soap:body> </soap:envelope> 57

Representational State Transfer Luźniejszy typologicznie od SOAP Nie stanowi protokołu, a raczej styl architektoniczy Nie wymaga XML (wspiera dowolny typ MIME) Nie wymaga nagłówka HTTP od dostawcy usługi RESTful web services 58

Brak jednolitego standardu Każdy zasób jest definiowany przez: URI Typ danych (MIME) Wspierane operacje (GET, PUT, POST, DELETE) 59

Zasób (URI) GET PUT POST DELETE http://example.com/resources/ (wskazuje całą kolekcję) http://example.com/resources/item17 (identyfikuje konkretny element) http://example.com/parents/132/children/17 Pobierz całą kolekcję Pobierz element (zgodnie z typem MIME) Pobierz dziecko o ID=17 rodzica o ID=132 Zastąp całą kolekcję Zastąp (lub utwórz) element Utwórz/zastąp dziecko rodzica o ID=132 nadając mu ID=17 Utwórz nowy element Utwórz nowy element wewnątrz wskazanego Utwórz pod- dziecko http://example.com?parent=132&child=17 j.w. j.w. j.w. j.w. http://example.com/parents/132?child=17 j.w j.w j.w j.w Usuń całą kolekcję Usuń wskazany element Usuń dziecko ID=17 z rodzica o ID=132 60

http://jersey.java.net/ Biblioteka Java dla RESTful Web services 61

Przykładowa struktura pakietów projektu 62

Klasa oferująca interfejs RESTful @Path("/voting") public class VotingRest { @POST @Path("/vote/{userId}/{objectId}/{value}") @Produces(MediaType.APPLICATION_JSON) public JSONObject vote(@pathparam( userid") String userid, @PathParam("objectId") String objectid, @PathParam( value") int value) throws JSONException { // pominięty kod odpowiedzialny za znalezienie obiektu i zarejestrowanie głosu JSONObject result = new JSONObject(); result.put( vote, object.getvote()); } return result; @GET @Path("/getVote") @Produces(MediaType.APPLICATION_JSON) public JSONObject getvote(@queryparam("objectid") String objectid) throws JSONException { // pominięty kod odpowiedzialny za znalezienie obiektu JSONObject result = new JSONObject(); result.put( vote, object.getvote()); } } return result; 63

Definicja servletu Jersey w web.xml <servlet> <servlet-name>jersey</servlet-name> <servlet-class>com.sun.jersey.spi.container.servlet.servletcontainer</servlet-class> <init-param> <param-name>com.sun.jersey.config.property.packages</param-name> <param-value>pl.lodz.p.kis.ksoir.rest</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>jersey</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping> 64

Kod JS zwracający głosy na obiekt (jquery) function getvote(objectid) { var vote = null; var resturl = "http://my.host/voting-ws/rest/voting/getvote?objectid=" + escape(objectid); $.ajax({ url: resturl, async: false, success: function(votejsonstring, textstatus, jqxhr) { vote = JSON.parse(voteJsonString); } }); } return vote; 65