Integracja aplikacji Wykład 4

1 Integracja aplikacji Wykład 4Piotr Czapiewski Wydział I...
Author: Jacek Wieczorek
0 downloads 2 Views

1 Integracja aplikacji Wykład 4Piotr Czapiewski Wydział Informatyki ZUT Integracja aplikacji Wykład 4

2 RESTful Web Services

3 REST – styl architektonicznyREpresentational State Transfer Praca doktorska Roya Fieldinga „Architectural Styles and the Design of Network-based Software Architectures” („The REST bible”) Określony poprzez zbiór ograniczeń (constraints), które należy spełnić Odpowiada zasadom leżącym u podstaw HTTP Web, HTTP, URI – jedna z możliwych realizacji

4 RESTful HTTP „The Web Used Correctly”Architektura systemu lub aplikacji Ściśle związana z Siecią Wykorzystująca HTTP, URI i inne standardy Webowe we właściwy sposób Inne określenia: Web-Oriented Architecture (WOA) Resource-Oriented Architecture (ROA)

5 REST – podstawowe zasadyGive Every „Thing” an ID Link Things To Each Other Use Standard Methods Allow for Multiple „Representations” Communicate Statelessly

6 1. Give Every „Thing” an IDIdentyfikuj wszystko, co zasługuje na identyfikację Wysokopoziomowe zasoby, abstrakcje, fizyczne lub wirtualne obiekty, kolekcje obiektów, wyniki obliczeń, procesy Zunifikowane, globalne ID = URI Sprawdzona, zrozumiała, globalna przestrzeń nazw Możliwość przesłania linka do zasobu

7 2. Link Things To Each Other„Hypermedia as the engine of application state” „Hyperlinking is what makes the Web the Web” Wykorzystuj hiperlinki do opisu relacji pomiędzy obiektami 23

8 3. Use Standard Methods Każdy zasób identyfikowany przez URI wspiera ten sam interfejs: Operacje zdefiniowane w specyfikacji HTTP Metody GET, POST, PUT, DELETE Obiektowa analogia zasobu w RESTful HTTP: class Resource { Resource(URI u); Response get(); Response post(Request r); Response put(Request r); Response delete(); }

9 3. Use Standard Methods Znaczenie metod HTTPGET – zwróć reprezentację zasobu POST – utwórz nowy zasób, aktualizuj lub dołącz zasób podrzędny PUT – aktualizuj lub utwórz zasób DELETE – usuń zasób Bezpieczeństwo i idempotencja: GET, PUT, DELETE HTTP CRUD POST Create, Update GET Read PUT Update, Create DELETE Delete

10 3. Use Standard Methods

11 3. Use Standard Methods

12 3. Use Standard Methods

13 3. Use Standard Methods Każdy komponent rozumiejący HTTP może wchodzić w interakcję z naszą aplikacją Przeglądarka WWW curl, wget Proxy, cache, serwer HTTP Google

14 4. Allow for Multiple RepresentationsObsługa wyniku operacji Skąd klient ma wiedzieć, jakie dane otrzyma, np. w wyniku żądania GET? Separacja koncepcji wywołania operacji i obsługi wyniku Klient obsługuje konkretny format i o taki format prosi HTTP content negotiation

15 4. Allow for Multiple RepresentationsDobra praktyka: Udostępnienie XML i HTML Umożliwienie dostępu nie tylko konkretnej aplikacji, lecz także standardowej przeglądarce WWW Informacja dostępna dla każdego, kto potrafi korzystać z WWW Web UI = Web API Dostęp do aplikacji przez człowieka i przez maszynę

16 5. Communicate StatelesslyKomunikacja bezstanowa Stan aplikacji zapisany jako stan zasobu lub Stan aplikacji zapisany po stronie klienta Serwer nie powinien przechowywać informacji o stanie komunikacji z klientem ponad to, co dotyczy bieżącego, pojedynczego żądania

17 REST a komponenty HTTP Pełne wykorzystanie operacji HTPPNegocjacja formatu zawartości GET, POST, PUT, DELETE, HEAD, OPTIONS, TRACE Przekierowanie Caching Kompresja Ustandaryzowane kody odpowiedzi 403 – brak dostępu 404 – zasób nie odnaleziony 500 – błąd aplikacji

18 REST vs. SOAP SOAP Web Services RESTful Web Services„Web” tylko w nazwie – słaba integracja z HTTP, ignorowanie cech Internetu „Protocol independence is a bug, not a feature” Osobny interfejs dla każdej usługi, protokół zależny od aplikacji Niewielkie różnice w stosunku do starszych rozwiązań (CORBA, DCOM, RMI) – „CORBA with angle brackets” RESTful Web Services Jeden, wspólny dla wszystkich interfejs Mapowanie podstawowych operacji na semantykę zasobów Standardowy protokół aplikacji (HTTP) Słabsze wsparcie ze strony narzędzi

19 REST vs. SOAP SOAP Web Services RESTful Web ServicesPrzywiązanie do XML Duże narzuty w komunikacji RESTful Web Services Obsługa XML i innych formatów Lekkie komunikaty 12345

20 REST vs. SOAP – przykład żądania 12345

21 REST vs. SOAP – przykład odpowiedzi soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> 12345 Jan Kowalski 12345 Jan Kowalski

22 REST vs. SOAP SOAP Web Services RESTful Web Services1 URL dla każdej usługi 1 metoda POST, wiele operacji RESTful Web Services Osobny URL dla każdego zasobu Kilka wspieranych metod (GET, PUT,POST, DELETE) Cacheable, addressable, linkable…

23 REST i SOAP a style integracjiRemote Procedure Call SOAP Messaging

24 REST vs. SOAP Co z bezpieczeństwem, szyfrowaniem, obsługą sesji, QoS, itd.? RESTful Web Services Brak standardowych mechanizmów Możliwość budowy własnych rozwiązań SOAP Web Services W podstawowych standardach – brak Rodzina protokołów WS-*

25 REST vs. SOAP REST Właściwy dla prostych scenariuszy integracji Właściwe dla API publicznych SOAP Właściwy w zaawansowanych scenariuszach integracji w środowiskach korporacyjnych Właściwe dla API prywatnych

26 RESTful Web Services – przykładyDostępne usługi Google Base, GData, Calendar, Documents, Blogger, Notebook, Picasa Amazon Simple Storage Service, Queue Service, Flexible Payment, Search Narzędzia Sun Jersey, JSR 311 IBM Abdera, Project Zero Microsoft WCF

27 RESTful Web Service – przykładyOnline REST Web Service Demo Baza danych SQL udostępniona jako usługa REST Pobieranie, edycja, dodawanie, usuwanie wierszy/obiektów

28 RESTGate – webowy klient usług REST

29 Implementacja REST Java i biblioteka JAX-RS

30 REST i Java – JAX-RS JAX-RS: Java API for RESTful Web ServicesCzęść standardu Java EE 6 Standardowe API upraszczające tworzenie usług REST Oparte na adnotacjach Implementacje Jersey – implementacja referencyjna (Sun/Oracle) Apache CXF RESTEasy (JBoss)

31 Adnotacje JAX-RS Mapowanie klas/metod do zasobów webowych@Path Mapowanie parametrów żądania do parametrów metody @FormParam Określenie typów MIME dla reprezentacji zasobów @Produces @Consumes

32 Serwer usługi REST w JAX-RSpackage pc.rest; import javax.ws.rs.GET; import javax.ws.rs.Path; @Path("hello") public class HelloRest { @GET public String hello() { return "Witamy w JAX-RS"; }

33 Serwer usługi REST w JAX-RSObsługa metod HTTP: GET POST PUT DELETE @Path("user") public class UsersService { @GET public String getUser() { // ... } @POST public String addUser() { @PUT public String updateUser() { @DELETE public String deleteUser() {

34 Serwer usługi REST w JAX-RSNegocjacja zawartości Tekst, XML, JSON Nagłówek HTTP accept @GET @Produces("text/plain") public String helloText() { return "Witamy w JAX-RS"; } @Produces("text/html") public String helloHtml() { return "

Witamy w JAX-RS

"; @Produces("application/xml") public String helloXml() { return "" + "Admin" + "Witamy w JAX-RS" + "";

35 Serwer usługi REST w JAX-RSParametry żądania @Path("hello/{imie}") public class HelloRest { @GET @Produces("text/plain") public String String imie) { return "Witaj w JAX-RS, " + imie; }

36 Klient Rest – Java

37 Klient Rest – Java

38 Klient Rest – PHP Biblioteka Pest – https://github.com/educoder/pest

39 Literatura L. Richardson, S. Ruby: RESTful Web Services A Brief Introduction to REST Addressing Doubts about REST REST Anti-Patterns Tutorial: Jersey + Tomcat