Architektury Usług Internetowych. Laboratorium 2 RESTful Web Services

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

Architektury Usług Internetowych. Laboratorium 1 Servlety

Wykład 3 Inżynieria oprogramowania. Przykład 1 Bezpieczeństwo(2) wg The Java EE 5 Tutorial Autor: Zofia Kruczkiewicz

Aplikacje www laboratorium

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

Ćwiczenie dotyczące platformy Java EE zostało przygotowane z myślą o środowisku NetBeans w wersji 7.3 (do pobrania z

Aplikacje webowe z wykorzystaniem Node.js oraz Express

Java wybrane technologie

Dokumentacja wstępna TIN. Rozproszone repozytorium oparte o WebDAV

Programowanie Komponentowe WebAPI

Wybrane działy Informatyki Stosowanej

Podręcznik Integracji

Aplikacje internetowe - laboratorium

Web Service y w Javie

Oracle9iAS: instalacja i konfiguracja aplikacji J2EE

Programowanie w Internecie

Specyfikacja techniczna. mprofi Interfejs API

Katalog książek cz. 3: Web Service

Dokumentacja techniczna API systemu SimPay.pl

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

Tworzenie witryn internetowych PHP/Java. (mgr inż. Marek Downar)

Poniższy diagram prezentuje scenariusz subskrypcji aplikacji do usługi CallEventNotifications.

Architektury Usług Internetowych. Laboratorium 1. Servlety

Spring Web MVC, Spring DI

Program szkolenia: REST i Microservices w PHP

Gatesms.eu Mobilne Rozwiązania dla biznesu

Podstawowe wykorzystanie Hibernate

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

Dokumentacja interfejsu HTTPD. Platforma BSMS.PL Instrukcja podłączenia po przez http

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

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

Programowanie Multimediów. Programowanie Multimediów JAVA. wprowadzenie do programowania (3/3) [1]

Komunikacja między serwletami

Technologie internetowe laboratorium nr 5. Zabezpieczanie usług sieciowych z wykorzystaniem HTTP Basic Authentication oraz HTTPS

EPI: Interfejs Graficzny Wykład nr 4 Podstawy frameworku Rails

Dokumentacja Techniczna. Dokumentacja techniczna usługi płatności mobilnych

PHP: bazy danych, SQL, AJAX i JSON

Zastosowanie komponentów EJB typu Session

JAVA NA SERWERZE SPRING. Waldemar Korłub. Platformy Technologiczne KASK ETI Politechnika Gdańska

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

Warstwa integracji. wg. D.Alur, J.Crupi, D. Malks, Core J2EE. Wzorce projektowe.

Java Server Faces - wprowadzenie

Technologie internetowe

Aplikacje internetowe - laboratorium

Ogólnopolskie Repozytorium Prac Dyplomowych

RESTful Web Services na platformie Java EE (JAX-RS)

Wybrane działy Informatyki Stosowanej

ZPKSoft WDoradca. 1. Wstęp 2. Architektura 3. Instalacja 4. Konfiguracja 5. Jak to działa 6. Licencja

prepared by: Programowanie WWW Servlety

Katalog książek cz. 2

Projektowanie oprogramowania. Warstwa integracji z bazą danych oparta na technologii ORM Platforma Java EE Autor: Zofia Kruczkiewicz

Internetowe bazy danych

Kurs ASP.NET ASP.NET CORE APLIKACJE WEBOWE

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

Paweł Rajba

Szczegółowy opis zamówienia:

Enterprise JavaBeans (EJB)

Architektura aplikacji

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

Specyfikacja HTTP API. Wersja 1.6

PHP: bloki kodu, tablice, obiekty i formularze

Aktualizacja SMSFall v Data publikacji:

Piotr Laskowski Krzysztof Stefański. Java Servlets

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

Polityka prywatności dla strony ELCEN Sp. z o.o. z siedzibą w Gdyni

Tworzenie i wykorzystanie usług sieciowych

Typy przetwarzania. Przetwarzanie zcentralizowane. Przetwarzanie rozproszone

Java wybrane technologie spotkanie nr 4. Serwlety c.d.

Świadczenie usługi hurtowej wysyłki wiadomości SMS dla Urzędu Miasta Torunia w latach

Testowanie aplikacji Java Servlets

Aplikacje WWW - laboratorium

Aplikacja webowa w Javie szybkie programowanie biznesowych aplikacji Spring Boot + Vaadin

Spring, Maven, Postman, Debugger

Aplikacje WWW - laboratorium

Specyfikacja implementacyjna aplikacji serwerowej

Wykład 4. Metody uwierzytelniania - Bezpieczeństwo (3) wg The Java EE 5 Tutorial Autor: Zofia Kruczkiewicz

Informatyka I. Standard JDBC Programowanie aplikacji bazodanowych w języku Java

Aplikacje WWW - laboratorium

Platformy Technologiczne

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

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

DirectBilling dokumentacja techniczna

Biocentrum Ochota infrastruktura informatyczna dla rozwoju strategicznych kierunków biologii i medycyny POIG /09

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

Jarosław Kuchta Administrowanie Systemami Komputerowymi. Internetowe Usługi Informacyjne

OpenLaszlo. OpenLaszlo

Zaawansowane aplikacje internetowe

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

API System Partnerski

API STRESZCZENIE DOKUMENTACJI TECHNICZNEJ. Strona 1 z 8

Wprowadzenie do Doctrine ORM

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

Programowanie. Dodatek - uzupełnienie wiadomości. mgr inż. Krzysztof Szwarc. Sosnowiec,

Podstawy programowania w języku JavaScript

Szczegółowa specyfikacja funkcjonalności zamawianego oprogramowania.

Dokumentacja Techniczna 1.2. Webtoken MT. Uruchomienie subskrybcji MT poprzez serwis WWW

Komunikacja międzysystemowa

Tworzenie witryn internetowych PHP/Java. (mgr inż. Marek Downar)

Transkrypt:

Architektury Usług Internetowych Laboratorium 2 RESTful Web Services Wstęp Celem laboratorium jest zapoznanie się z modelem usług sieciowych opartych na standardzie REST. RESTful Web Services Usługami sieciowymi nazywa się aplikacje klienckie i serwerowe komunikujące się ze sobą poprzez WWW z wykorzystaniem protokoły HTTP. Zakładają one interoperacyjność pomiędzy aplikacjami uruchomionymi na różnych platformach i frameworkach oraz opisy przetwarzane przez aplikacje (np. wykorzystujące XML). Luźno powiązane usługi można łączyć w celu uzyskania skomplikowanych operacji. Usługi oparte na standardzie REST (RESTful Web Services) powinny cechować się bezstanowością. Interakcja z serwerem powinna być odporna na jego restart a cała stanowość (ciąg kilku operacji) powinna być realizowana poprzez odpowiednie parametry w odnośnikach. Standard REST definiuje działanie na zasobach identyfikowanych poprzez URI poprzez operacje zdefiniowane w protokole HTTP: PUT stworzenie nowego zasobu, GET pobranie aktualnego stanu zasobu, POST aktualizacja stanu zasobu, DELETE usunięcie zasobu. Wykorzystanie URI do identyfikacji zasobów, metod HTTP do opisu operacji na nich oraz formatów XML i JSON do opisu danych przesyłanych pomiędzy klientem a serwerem sprawia że usługi typu REST są często używane w połączeniu z rozwiązaniami opartymi na języku JavaScript i technologii AJAX. Zgodnie ze standardem, zasoby powinny być ułożone w hierarchię. Przykładowo w sytuacji gdy podstawowym zasobem będzie książka zawierającego jakiegoś autora możemy założyć następujące adresy: resources/books lista wszystkich książek, resources/books/{id jedna książka o konkretnym id, resources/books/{id/author autor konkretnej książki. 2014 Michał Wójcik 1

W powyższym przykładzie {id jest parametrem typu path param, czyli będącym elementem adresu. Dodatkowo można używać parametrów typu query param, czyli takich, które są doklejane do adresu (po znaku?). Używa się ich raczej do dodatkowego sparametryzowania żądania, nie do identyfikacji zasobów na których działamy. Przykładowo żądanie listy książek z paginacją miało by następujący format: resources/books?offset=10&limit=5. Operacje na zasobach można odwzorować na CRUD, czyli podstawowe operacje wykorzystywane w aplikacjach działających na pamięci trwałej. Poniższa tabela pokazuje odwzorowanie podstawowej akcji na akcje w REST i SQL. Operacja SQL HTTP Create INSERT POST Read SELECT GET Update UPDATE PUT Delete DELETE DELETE Dla powyższych operacji można określić jakie wartości i kody HTTP powinny być zwracane w różnych sytuacjach. Poniższa tabela przedstawia takie zestawienie zarówno dla pobierania kolekcji elementów (np. resoruces/books) jak i pojedynczego konkretnego elementu (no. Resources/books/{id). Operacja Kolekcja Element GET 200 (OK), paginacja, sortowanie 200 (OK), pojedynczy element, 404 (Not Found) PUT 404 (Not Found) 200 (OK), 204 (No Content), 404 (Not Found) POST 201 (Created), Location w nagłówku 404 (Not Found) DELETE 404 (Not Found) 200 (OK), 404 (Not Found) JAX-RS Java API for RESTful Web Services JAX-RS jest standardem tworzenia usług sieciowych zgodnych ze standardem REST na platformie Java/Java EE. Standard jest obowiązkowy w ramach profili Java EE Web i Full profile, co oznacza że powinien być zaimplementowany w każdym serwerze aplikacji. Referencyjną implementacją standardu jest projekt Jersey, który jest wykorzystywany w serwerze aplikacji GlassFish a także może być uruchomiony w dowolnym kontenerze servlewów. Ponieważ serwer Apache Tomcat nie jest dostarczony z implementacją JAX- RS, należy samemu do projektu webowego dodać odpowiednią zależność, tak aby została wdrożona na serwer razem z aplikacją. <dependency> 2014 Michał Wójcik 2

<groupid>org.glassfish.jersey.containers</groupid> <artifactid>jersey container servlet</artifactid> <version>2.13</version> </dependency> <dependency> <groupid>org.glassfish.jersey.media</groupid> <artifactid>jersey media json jackson</artifactid> <version>2.13</version> </dependency> Biblioteka jerser-container-servlet zapewnia kontener dla usług sieciowych działający w kontenerze servletu, natomiast jersey-media-json-jackson zapewnia procesor formatu JSON. Jednym ze sposobów uruchomienia usług w aplikacji webowej jest skonfigurowanie centralnego servletu w pliku web.xml, który będzie przekierowywał żądania HTTP do odpowiednich metod skonfigurowanych jako usługi. <servlet> <servlet name>servletcontainer</servlet name> <servlet class> org.glassfish.jersey.servlet.servletcontainer </servlet class> <init param> <param name> jersey.config.server.provider.packages </param name> <param value> pl.gda.pg.eti.kask.aui.rest.resources </param value> </init param> <init param> <param name> jersey.config.server.provider.scanning.recursive </param ame> <param value>false</param value> </init param> </servlet> <servlet mapping> <servlet name>servletcontainer</servlet name> <url pattern>/resources/*</url pattern> </servlet mapping> Usługi oraz ich parametry można definiować za pomocą adnotacji: @Path adres zasobu, 2014 Michał Wójcik 3

żądania HTTP: @GET, @POST, @PUT, @DELETE, @HEAD; @PathParam parametr będący elementem URI, @QueryParam parametr doklejany do URI, @FormParam parametr wysłany przez formularz metodą POST, @DefaultValue domyślna wartość dla parametrów typu query param, @Consumes specyfikacja typu MIME przyjmowanego przez usługę, @Produces specyfikacja typu MIME zwracanego przez usługę, @Context pozwana na wstrzyknięcie obiektów: UriInfo zbiór wszystkich parametrów, HttpHeaders nagłówki i ciastka, ServletContext konteks servletu, HttpServletRequest obiek żądania, HttpServletResponse obiekt odpowiedzi. Przykład usługi zwracającej konkretną książkę w formacie JSON: @Path("/books") public class BooksResource { @Path("{id") @GET @Produces(MediaType.APPLICATION_JSON) public Book findbook(@pathparam("id") Integer id) {... Przykład usługi zwracającej listę książek w formacje JSON z obsługą paginacji: 2014 Michał Wójcik 4

@Path("/books") public class BooksResource { @Path("") @GET @Produces(MediaType.APPLICATION_JSON) public List<Book> findbooks( @DefaultValue("0") @QueryParam("off") Integer off, @DefaultValue("10") @QueryParam("size") Integer size) {... JAX-RS klient Aby przygotować aplikację Java SE będącą klientem dla usługi typu rest można skorzystać z bibliotek dostarczonych przez projekt Jersey. <dependency> <groupid>org.glassfish.jersey.core</groupid> <artifactid>jersey client</artifactid> <version>2.13</version> </dependency> <dependency> <groupid>org.glassfish.jersey.media</groupid> <artifactid>jersey media json jackson</artifactid> <version>2.13</version> </dependency> W celu nawiązania połączenia z serwerem należy stworzyć obiekt Client, następnie z jego pomocą stworzyć obiekt WebTarget, który będzie służył wywoływaniu kolejnych żądań. Client client = ClientBuilder.newClient(); WebTarget root = client.target(address + "/resources/books"); List<Book> books = root.path("").request(mediatype.application_json_type).get(new GenericType<List<Book>>() {); Book book = root.path(1).request().get(book.class); Zabezpieczenie usług Jednym ze sposobów zabezpieczania usług jest zabezpieczenie na poziomie kontenera webowego. Serwer Apache Tomcat pozwala na definiowanie domen bezpieczeństwa opartych różnych mechanizmach (pliki xml, bazy danych, ldap itd), ale dla uproszczenia można skorzystać z domyślnego pliku conf/tomcatusers.xml: 2014 Michał Wójcik 5

<?xml version="1.0" encoding="utf 8"?> <tomcat users> <user password="nb" roles="manager script,admin" username="nb"/> <user password="psysiu" roles="reader" username="psysiu"/> <user password="admin" roles="reader,editor" username="admin"/> </tomcat users> Następnie należy zdefiniować role użytkowników w deskryptorze aplikacji webowej WEB-INF/web.xml: <web app> <security role> <role name>editor</role name> </security role> <security role> <role name>reader</role name> </security role> </web app> Aby umożliwić logowanie z wykorzystaniem metody BASIC AUTHENTICATION (pozwalającej na wysłanie loginu i hasła w nagłówku HTTP) należy dodać odpowiedni wpis w deskryptorze web.xml. <web app> <login config> <auth method>basic</auth method> </login config> </web app> Ostatnim elementem w deskryptorze web.xml jest zdefiniowanie które zasoby i strony wymagają uwierzytelniania i autoryzacji: <web app> <security constraint> <web resource collection> <web resource name>management pages</web resource name> <url pattern>/list_books.html</url pattern> <url pattern>/resources/*</url pattern> </web resource collection> <auth constraint> <role name>editor</role name> <role name>reader</role name> </auth constraint> </security constraint> </web app> Z poziomu kodu usługi autoryzację można zrealizować za pomocą obiektu typu SecuriyConext uzsykanego za pomocą adnotacji @Context. 2014 Michał Wójcik 6

@Path("/books") public class BooksResource { @Context SecurityContext securitycontext; @Path("") @GET @Produces(MediaType.APPLICATION_JSON) public List<Book> findbooks( @DefaultValue("0") @QueryParam("off") Integer off, @DefaultValue("10") @QueryParam("size") Integer size) { if (securitycontext.isuserinrole("reader")) {... else {... Aby umożliwić przekazanie loginu i hasła w nagłówkach HTTP z poziomu klienta napisanego w Java SE należy skorzystać z klasy HttpAuthenticationFeature: Client client = ClientBuilder.newClient(); HttpAuthenticationFeature feature; feature = HttpAuthenticationFeature.basic(login, password); client.register(feature); Elementy przykładu Dla usług typu REST przygotowano trzy przykłady. Wszystkie bazują na przykładzie z książkami opartym na servletach, więc po dokładniejszy opis należy udać się do instrukcji dla zadania pierwszego. Przykłady: SimpleRest servlety odpowiedzialne za zarządzanie książkami zamieniono na jedną klasę udostępniającą usługi, Rest rozwinięcie poprzedniego przykładu o dodatkowe elementy oferowane przez technologię JAX-RS, SecuredRest uproszony przykład wykorzystujący autoryzacja i uwierzytelnianie, RestClient klient usług wykonany w technologii Java SE pozwalający na przekazanie loginu i hasła do usługi. Elementy projektu RestClient: 2014 Michał Wójcik 7

pl.gda.pg.eti.kask.aui.rest: entities: Book.java klasa reprezentującą książkę; client: App.java główna klasa programu, BookResource.java klasa pozwalająca na wywoływanie usług, zawiera te same metody co klasa BookResource.java w projektach webowych. Przykładowe zadania W ramach laboratorium należy skonfigurować środowisko (Apache Tomcat) oraz uruchomić na nim przykładową aplikację (jedna z trzech, wybrana przez prowadzącego). Następnie należy wprowadzić modyfikację wybraną przez prowadzącego. Modyfikacje mogą dotyczyć dodania obsługi nowej komendy do usługi (wraz odpowiednimi wywołaniami z poziomu JavaScript lub HTML), zmiany lub dodanie obiektów przechowywanych w zasięgu sesji lub aplikacji oraz zmiany istniejących funkcjonalności usług (np. przez zmianę parametrów przez nie obsługiwanych). Po oddaniu zadania należy usunąć wszystkie swoje zmiany (ręcznie zainstalowany server Apache Tomcat lub stworzony prywatny katalog instancji serwera oraz projekt). 2014 Michał Wójcik 8