Vous êtes sur la page 1sur 30

Tytu oryginau: RESTful Java Patterns and Best Practices

Tumaczenie: ukasz Piwko


ISBN: 978-83-283-0644-8
Copyright Packt Publishing 2014.
First published in the English language under the title
RESTful Java Patterns and Best Practices (9781783287963).
Polish edition copyright 2015 by Helion S.A.
All rights reserved.
All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means,
electronic or mechanical, including photocopying, recording or by any information storage retrieval system,
without permission from the Publisher.
Wszelkie prawa zastrzeone. Nieautoryzowane rozpowszechnianie caoci lub fragmentu niniejszej
publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metod kserograficzn,
fotograficzn, a take kopiowanie ksiki na noniku filmowym, magnetycznym lub innym powoduje
naruszenie praw autorskich niniejszej publikacji.
Wszystkie znaki wystpujce w tekcie s zastrzeonymi znakami firmowymi bd towarowymi ich
wacicieli.
Autor oraz Wydawnictwo HELION dooyli wszelkich stara, by zawarte w tej ksice informacje byy
kompletne i rzetelne. Nie bior jednak adnej odpowiedzialnoci ani za ich wykorzystanie, ani za zwizane
z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie
ponosz rwnie adnej odpowiedzialnoci za ewentualne szkody wynike z wykorzystania informacji
zawartych w ksice.
Wydawnictwo HELION
ul. Kociuszki 1c, 44-100 GLIWICE
tel. 32 231 22 19, 32 230 98 63
e-mail: helion@helion.pl
WWW: http://helion.pl (ksigarnia internetowa, katalog ksiek)
Drogi Czytelniku!
Jeeli chcesz oceni t ksik, zajrzyj pod adres
http://helion.pl/user/opinie/restja
Moesz tam wpisa swoje uwagi, spostrzeenia, recenzj.
Printed in Poland.

Kup ksik
Pole ksik
Oce ksik

Ksigarnia internetowa
Lubi to! Nasza spoeczno

Spis treci
O autorce

Podzikowania

O recenzentach

Wstp

11

Rozdzia 1. Podstawy REST

15

Wprowadzenie do REST
REST i bezstanowo
Model dojrzaoci Richardsona
Poziom 0 zdalne wywoywanie procedur
Poziom 1 zasoby REST
Poziom 2 dodatkowe czasowniki HTTP
Poziom 3 HATEOAS
Bezpieczestwo i idempotentno
Bezpieczestwo metod
Idempotentno metod
Zasady projektowe dotyczce budowy usug typu RESTful
Wyznaczenie identyfikatorw URI zasobw
Identyfikacja metod obsugiwanych przez zasb
Czasowniki HTTP w REST
PUT czy POST
Identyfikacja rnych reprezentacji zasobu
Implementowanie API
API Javy dla usug RESTful (JAX-RS)

Kup ksik

16
16
16
17
17
17
18
18
18
18
19
19
20
21
22
22
23
23

Pole ksik

REST. Najlepsze praktyki i wzorce w jzyku Java

Wdraanie usug typu RESTful


Testowanie usug typu RESTful
API klienta w JAX-RS 2.0
Uzyskiwanie dostpu do zasobw RESTful
Inne narzdzia
Najlepsze praktyki projektowania zasobw
Zalecana lektura
Podsumowanie

Rozdzia 2. Projektowanie zasobw


Rodzaje odpowiedzi REST
Negocjacja treci
Negocjacja treci przy uyciu nagwkw HTTP
Negocjacja treci poprzez adres URL
Dostawcy jednostek i rne reprezentacje
StreamingOutput
ChunkedOutput
Jersey i JSON
Wersjonowanie API
Okrelanie wersji w identyfikatorze URI
Numer wersji w parametrze zapytaniowym dania
Okrelanie numeru wersji w nagwku Accept
Kody odpowiedzi i wzorce REST
Zalecana lektura
Podsumowanie

Rozdzia 3. Bezpieczestwo i wykrywalno


Rejestrowanie informacji w API REST
Najlepsze praktyki rejestrowania informacji w API REST
Sprawdzanie poprawnoci usug REST
Obsuga wyjtkw i kodw odpowiedzi
zwizanych z weryfikacj poprawnoci danych
Obsuga bdw w usugach typu RESTful
Uwierzytelnianie i autoryzacja
Co to jest uwierzytelnianie
Co to jest autoryzacja
Rnice midzy OAuth 2.0 i OAuth 1.0
Tokeny odwieania a tokeny dostpu
Najlepsze praktyki przy implementacji OAuth w API REST
OpenID Connect
Elementy architektury REST
Zalecana lektura
Podsumowanie

25
25
25
27
29
29
30
30

31
31
32
32
35
35
36
37
38
40
40
41
41
42
43
44

45
46
47
49
50
51
52
53
54
57
57
58
59
59
61
62

Kup ksik

Pole ksik

Spis treci

Rozdzia 4. Projektowanie wydajnych rozwiza

63

Zasady buforowania
Szczegy buforowania
Typy nagwkw buforowania
Nagwek Cache-Control i dyrektywy
Nagwek Cache-Control i API REST
Znaczniki ETag
API REST Facebooka i nagwki ETag
Asynchroniczne i dugotrwae operacje w REST
Asynchroniczne przetwarzanie da i odpowiedzi
Najlepsze praktyki pracy z zasobami asynchronicznymi
Wysyanie kodu statusu 202 Accepted
Ustawianie terminu wyganicia dla obiektw w kolejce
Asynchroniczne obsugiwanie zada przy uyciu kolejek wiadomoci
Metoda HTTP PATCH i czciowe aktualizacje
JSON Patch
Zalecana lektura
Podsumowanie

64
64
64
65
66
67
69
70
70
73
73
74
74
74
76
77
77

Rozdzia 5. Zaawansowane zasady projektowania

79

Techniki ograniczania liczby da


Ukad projektu
Szczegowa analiza przykadu ograniczania liczby da
Najlepsze praktyki pozwalajce unikn przekroczenia limitu da przez klienty
Stronicowanie odpowiedzi
Rodzaje stronicowania
Ukad projektu
Internacjonalizacja i lokalizacja
Rne tematy
HATEOAS
API REST portalu PayPal i HATEOAS
REST i rozszerzalno
Inne tematy zwizane z API REST
Testowanie usug typu RESTful
Zalecana lektura
Podsumowanie

80
81
82
86
87
88
90
91
92
92
93
94
94
95
96
96

Rozdzia 6. Nowe standardy i przyszo technologii REST


API reagujce na bieco
Sondowanie
Model PuSH PubSubHubbub
Model strumieniowania
Uchwyty sieciowe
Gniazda sieciowe

97
98
98
99
100
103
104

Kup ksik

Pole ksik

REST. Najlepsze praktyki i wzorce w jzyku Java

Inne API i technologie do komunikacji na bieco


XMPP
BOSH poprzez XMPP
Porwnanie uchwytw sieciowych, gniazd sieciowych i zdarze
wysyanych przez serwer
REST i mikrousugi
Prostota
Wyodrbnienie problemw
Skalowalno
Wyrany podzia funkcjonalnoci
Niezaleno od jzyka programowania
Zalecana lektura
Podsumowanie

Dodatek A
Przegld API REST portalu GitHub
Pobieranie informacji z portalu GitHub
Czasowniki i akcje zasobw
Wersjonowanie
Obsuga bdw
Ograniczanie liczby da
Przegld API Graph portalu Facebook
Czasowniki i czynnoci zasobw
Wersjonowanie
Obsuga bdw
Ograniczanie liczby da
Przegld API portalu Twitter
Czasowniki i dziaania na zasobach
Wersjonowanie
Obsuga bdw
Zalecana lektura
Podsumowanie

Skorowidz

106
106
107
107
108
108
108
109
109
109
109
110

111
111
112
113
113
113
114
114
116
116
116
117
117
118
119
119
119
119

121

Kup ksik

Pole ksik

1
Podstawy REST
Usugi sieciowe w tradycyjnej technologii SOA, umoliwiajce zrnicowan komunikacj
midzy aplikacjami, istniej ju od pewnego czasu. Jednym ze sposobw obsugi tej komunikacji jest uycie technologii Simple Object Access Protocol (SOAP) i Web Service Description
Language (WSDL). S to standardy oparte na formacie XML doskonale sprawdzajce si, gdy
midzy usugami jest cisy kontakt. Ale nastaa era usug rozproszonych. Teraz rne klienty
z internetu, urzdzenia przenone, jak rwnie inne usugi (wewntrzne i zewntrzne) mog
uywa interfejsw API udostpnianych przez rnych dostawcw i rne platformy open
source. To sprawia, e potrzebne s technologie atwej wymiany informacji midzy usugami
rozproszonymi w rnych miejscach, z przewidywalnymi, solidnymi, cile zdefiniowanymi
interfejsami.
Protok HTTP 1.1, zdefiniowany w dokumencie RFC 2616, jest powszechnie uywany w rozproszonych systemach hipermedialnych. Technologia Representational State Transfer (REST)
bazuje na HTTP i moe by uywana wszdzie tam, gdzie ten protok. W tym rozdziale przedstawione s podstawowe wiadomoci na temat projektowania usug typu RESTful oraz uywania takich usug za pomoc standardowych interfejsw API Javy.
W rozdziale omwiono nastpujce zagadnienia:
Q Wprowadzenie do technologii REST.
Q Bezpieczestwo i idempotentno.
Q Zasady projektowe dotyczce budowy usug typu RESTful.
Q Standardowe API Javy dla usug typu RESTful.
Q Najlepsze techniki projektowania usug typu RESTful.

Kup ksik

Pole ksik

REST. Najlepsze praktyki i wzorce w jzyku Java

Wprowadzenie do REST
REST to styl architektoniczny zgodny z takimi standardami sieciowymi jak czasowniki HTTP
i identyfikatory URI. Obowizuj w nim nastpujce zasady:
Q Wszystkie zasoby okrela identyfikator URI.
Q Kady zasb moe mie liczne reprezentacje.
Q Kady zasb mona pobra, zmodyfikowa, utworzy i usun standardowymi

metodami HTTP.
Q Na serwerze nie s przechowywane adne informacje o stanie.

REST i bezstanowo
W REST obowizuje zasada bezstanowoci. Kade danie przesyane przez klienta do serwera musi zawiera wszystkie informacje potrzebne do obsugi tego zdarzenia. To poprawia
widoczno, niezawodno i skalowalno da.
Poprawa widocznoci wynika z tego, e system monitorujcy dania nie musi szuka szczegw poza daniami. Niezawodno poprawia si dziki wyeliminowaniu punktw kontrolnych i wznowienia w przypadku czciowych niepowodze operacji. Poprawa skalowalnoci
jest efektem zwikszenia liczby da, ktre jest w stanie przetworzy serwer, co jest moliwe
dziki temu, e serwer nie musi przechowywa informacji o stanie.
Roy Fielding napisa doktorat na temat stylu architektonicznego REST, w ktrym szczegowo opisa bezstanowo tej technologii. Wicej informacji na ten temat mona znale pod adresem http://www.ics.
uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm.

To s podstawowe wiadomoci o technologii REST. Teraz zajmiemy si rnymi poziomami


dojrzaoci i zobaczymy, gdzie pord nich mieci si ta technologia.

Model dojrzaoci Richardsona


Model dojrzaoci Richardsona to opracowany przez Leonarda Richardsona model opisujcy podstawy REST pod wzgldem zasobw, czasownikw i hipermediw. Punktem pocztkowym tego modelu jest wykorzystanie HTTP jako warstwy transportowej. Ukazuje to poniszy schemat.

16

Kup ksik

Pole ksik

Rozdzia 1. Podstawy REST

Poziom 0 zdalne wywoywanie procedur


Do poziomu 0 zalicza si przesyanie danych przy uyciu technologii SOAP i XML-RPC jako
POX (ang. Plain Old XML zwyky XML). Uywana jest tylko metoda POST. Jest to najprostszy sposb budowania aplikacji SOA z jedn metod POST i przy uyciu formatu XML do komunikacji midzy usugami.

Poziom 1 zasoby REST


Na poziomie 1 uywane s metody POST, a zamiast funkcji i przekazywania argumentw wykorzystuje si identyfikatory URI REST. Zatem nadal uywana jest tylko jedna metoda HTTP.
Zalet tego poziomu w stosunku do zerowego jest podzia zoonej funkcjonalnoci na kilka
zasobw za pomoc jednej metody POST sucej do komunikacji midzy usugami.

Poziom 2 dodatkowe czasowniki HTTP


Na poziomie drugim jest wicej czasownikw, np. GET, HEAD, DELETE, PUT i oczywicie POST.
Poziom ten reprezentuje rzeczywisty przypadek uycia technologii REST, w ktrej wykorzystuje si rne czasowniki HTTP do wykonywania rnych da, a system moe zawiera
wiele zasobw.

17

Kup ksik

Pole ksik

REST. Najlepsze praktyki i wzorce w jzyku Java

Poziom 3 HATEOAS
HATEOAS (ang. Hypermedia as the Engine of Application State hipermedia jako mechanizm obsugi stanu aplikacji) reprezentuje najwyszy stopie dojrzaoci w modelu Richardsona. Odpowiedzi na dania klientw zawieraj elementy hipermedialne, przy uyciu ktrych
klient moe zdecydowa, co robi dalej. Zasady te uatwiaj wykrywanie usug i sprawiaj, e
odpowiedzi s bardziej zrozumiae. Tocz si dyskusje na temat tego, czy HATEOAS rzeczywicie spenia wymagania RESTful, poniewa reprezentacja zawiera o wiele wicej informacji ni tylko opis zasobu. W rozdziale 5. przedstawiam par przykadw pokazujcych, jak zaimplementowano HATEOAS jako cz API niektrych platform, np. PayPal.
W nastpnym podrozdziale wyjaniam pojcia bezpieczestwo i idempotentno, ktre s bardzo wane w usugach RESTful.

Bezpieczestwo i idempotentno
W poniszych dwch podrozdziaach dokadniej wyjaniam znaczenie bezpieczestwa i idempotentnoci metod.

Bezpieczestwo metod
Bezpieczna metoda to taka, ktra nie zmienia stanu na serwerze. Warunek ten spenia na przykad metoda GET /v1/coffees/orders/1234.
Bezpieczne metody, do ktrych zaliczaj si GET i HEAD, mona buforowa.
Metoda PUT nie jest bezpieczna, poniewa tworzy lub modyfikuje zasoby na serwerze. To samo dotyczy
metody POST. Z kolei metoda DELETE nie jest bezpieczna, poniewa usuwa zasoby z serwera.

Idempotentno metod
Metoda idempotentna to taka, ktra zwraca taki sam wynik niezalenie od tego, ile razy zostanie wywoana.
Metoda GET jest idempotentna, poniewa niezalenie od tego, ile razy si j wywoa, zawsze zwraca
tak sam odpowied.
Metoda PUT te jest idempotentna, poniewa wielokrotne jej wywoanie powoduje aktualizacj tego
samego zasobu i nie zmienia to wyniku.

18

Kup ksik

Pole ksik

Rozdzia 1. Podstawy REST

Metoda POST nie jest idempotentna, poniewa jej wielokrotne wywoanie moe dawa rne skutki
i powodowa powstanie wielu zasobw. Metoda DELETE jest idempotentna, gdy usunity zasb znika
i powtrne wywoanie tej samej metody niczego nie zmieni.

Zasady projektowe dotyczce budowy usug


typu RESTful
Poniej w punktach przedstawiam proces projektowania, tworzenia i testowania usug typu
RESTful. Dalej znajduje si dokadniejszy opis kadego z tych etapw:
Q Wyznaczenie identyfikatorw URI zasobw.

Polega na wybraniu rzeczownikw do reprezentowania zasobu.


Q Identyfikacja metod obsugiwanych przez zasb.

Polega na wybraniu metod HTTP do wykonywania operacji CRUD (ang. create,


read, update, delete utworzenie, odczytanie, aktualizacja, usunicie).
Q Identyfikacja rnych reprezentacji zasobu.

Polega na wybraniu, czy zasb bdzie reprezentowany w formacie JSON, XML,


HTML, czy tekstowym.
Q Implementacja usug RESTful przy uyciu API JAX-RS.

Interfejs API naley zaimplementowa na podstawie specyfikacji JAX-RS.


Q Wdroenie usug RESTful.

Wdroenie usugi w kontenerze aplikacji, np. Tomcat, GlassFish lub WildFly.


Na przykadach pokazuj, jak tworzy si pliki WAR, i prezentuj sposb wdroenia
na serwerze GlassFish 4.0. Poza tym przedstawiony przykad dziaa w kadym
kontenerze zgodnym z Java EE 7.
Q Testowanie usug RESTful.

Polega na napisaniu API klienta do testowania usug lub uyciu narzdzi cURL
albo przegldarkowych do testowania da REST.

Wyznaczenie identyfikatorw URI zasobw


Zasoby RESTful s identyfikowane przez identyfikatory URI. Dziki temu technologia REST
jest rozszerzalna.
Ponisza tabela zawiera przykady identyfikatorw URI, ktre mog reprezentowa rne zasoby w systemie.

19

Kup ksik

Pole ksik

REST. Najlepsze praktyki i wzorce w jzyku Java

URI

Opis

/v1/library/books

Moliwa reprezentacja kolekcji zasobw ksikowych w bibliotece.

/v1/library/books/isbn/12345678

Moliwa reprezentacja jednej ksiki identyfikowanej przez numer


ISBN 123456.

/v1/coffees

Moliwa reprezentacja wszystkich kaw sprzedanych w kawiarni.

/v1/coffees/orders

Moliwa reprezentacja wszystkich zamwionych kaw w kawiarni.

/v1/coffees/orders/123

Moliwa reprezentacja pojedynczego zamwienia kawy


o identyfikatorze 123.

/v1/users/1235

Moliwa reprezentacja uytkownika o identyfikatorze w systemie 1235.

/v1/users/5034/books

Moliwa reprezentacja wszystkich ksiek uytkownika


o identyfikatorze 5034.

Wszystkie przedstawione identyfikatory s zbudowane wg jasnego wzorca, ktry klient moe


bez trudu zinterpretowa. Wszystkie te zasoby mog mie liczne reprezentacje, np. w formacie JSON, XML, HTML lub tekstowym, i mona nimi zarzdza za pomoc metod GET, PUT,
POST i DELETE.

Identyfikacja metod obsugiwanych przez zasb


Czasowniki HTTP stanowi wany skadnik jednolitego ograniczenia interfejsu, ktre definiuje zwizek midzy czynnociami opisywanymi przez dany czasownik w stosunku do opisanego
za pomoc rzeczownikw zasobu REST.
Ponisza tabela zawiera zestawienie metod HTTP i opis powodowanych przez nie zdarze oraz
prosty przykad kolekcji ksiek w bibliotece.
Metoda HTTP URI zasobu

Opis

GET

/library/books

Pobiera list ksiek.

GET

/library/books/isbn/12345678

Pobiera ksik o numerze ISBN 12345678.

POST

/library/books

Tworzy nowe zamwienie ksiki.

DELETE

/library/books/isbn/12345678

Usuwa ksik o numerze ISBN 12345678.

PUT

/library/books/isbn/12345678

Aktualizuje ksik o numerze ISBN 12345678.

PATCH

/library/books/isbn/12345678

Czciowo aktualizuje ksik o numerze ISBN 12345678.

W kolejnym podrozdziale znajduje si opis zastosowania kadego z czasownikw HTTP w kontekcie REST.

20

Kup ksik

Pole ksik

Rozdzia 1. Podstawy REST

Czasowniki HTTP w REST


Czasowniki HTTP stanowi dla serwera informacj o tym, co ma zrobi z otrzymanymi danymi.

GET
GET to najprostsza metoda HTTP pozwalajca uzyska dostp do zasobu. Gdy klient kliknie
adres URL w przegldarce internetowej, aplikacja ta wysya danie GET pod ten wanie adres. Metoda GET jest bezpieczna i idempotentna. dania wysyane t metod s buforowane

i mog zawiera parametry.


Poniej znajduje si proste danie GET pobierajce wszystkich aktywnych uytkownikw:
curl http://api.foo.com/v1/users/12345?active=true

POST
Metoda POST suy do tworzenia zasobw. dania wysyane przy uyciu tej metody nie s
idempotentne ani bezpieczne. Wielokrotne wywoania mog spowodowa utworzenie wielu
zasobw.
danie POST powinno powodowa uniewanienie odpowiedniego elementu w buforze, jeli
taki istnieje. W daniach POST nie zaleca si stosowania parametrw zapytaniowych.
Poniej znajduje si danie utworzenia uytkownika:
curl X POST -d'{"name":"Jan Kowalski","username":"jkow", "phone":
"412-344-5644"}' http://api.foo.com/v1/users

PUT
Metoda PUT suy do aktualizowania zasobw. Jest ona idempotentna, ale nie jest bezpieczna.
Wielokrotne dania tego typu powinny dawa taki sam efekt w postaci zaktualizowania zasobu.
dania PUT powinny uniewania zawarto bufora, jeli taka istnieje.
Poniej znajduje si przykad dania PUT aktualizujcego uytkownika:
curl X PUT -d'{ "phone":"413-344-5644"}'
http://api.foo.com/v1/users

DELETE
Metoda DELETE suy do usuwania zasobw. Jest idempotentna, ale nie jest bezpieczna. Idempotentno wynika z tego, e zgodnie ze specyfikacj RFC 2616 skutki uboczne dowolnej wikszej od zera liczby da s takie same jak jednego dania. Oznacza to, e po usuniciu zasobu kolejne wywoania metody DELETE nic nie zmieniaj.

21

Kup ksik

Pole ksik

REST. Najlepsze praktyki i wzorce w jzyku Java

Poniej znajduje si przykadowe danie usuwajce uytkownika:


curl X DELETE http://foo.api.com/v1/users/1234

HEAD
dania typu HEAD s podobne do GET. Rnica midzy nimi polega na tym, e w odpowiedzi
na danie HEAD zwracane s tylko nagwki HTTP, bez treci. Metoda HEAD jest idempotentna
i bezpieczna.
Poniej znajduje si przykadowe danie HEAD wysyane za pomoc narzdzia cURL:
curl X HEAD http://foo.api.com/v1/users
Jeli zasb jest duy, to za pomoc dania HEAD mona sprawdzi, czy co si w nim zmienio, zanim si
je pobierze przy uyciu dania GET.

PUT czy POST


Zgodnie z dokumentem RFC rnica midzy metodami PUT i POST dotyczy identyfikatora URI
dania. W metodzie POST przesany identyfikator URI definiuje jednostk, ktra ma obsuy
danie. W daniu PUT natomiast identyfikator URI zawiera t jednostk.
A zatem POST /v1/coffees/orders oznacza utworzenie nowego zasobu i zwrcenie opisujcego
go identyfikatora. PUT /v1/coffees/orders/1234 oznacza natomiast aktualizacj zasobu o identyfikatorze 1234, jeli taki istnieje. Jeli nie ma takiego zasobu, zostanie utworzone nowe zamwienie, do ktrego identyfikacji zostanie uyty URI orders/1234.
Zarwno metody PUT, jak i POST mona uywa do tworzenia i aktualizacji zasobw. Wybr jednej z nich
zaley gwnie od tego, czy potrzebna jest idempotentno metody, oraz od lokalizacji zasobu.

W nastpnym podrozdziale dowiesz si, jak identyfikowa rne reprezentacje zasobu.

Identyfikacja rnych reprezentacji zasobu


Zasoby RESTful s jednostkami abstrakcyjnymi, ktre przed przesaniem do klienta trzeba podda serializacji do jakiego reprezentacyjnego formatu. Wrd najczciej uywanych reprezentacji mona wymieni XML, JSON, HTML i zwyky tekst. Zasb moe dostarcza klientowi reprezentacj w zalenoci od tego, co klient ten jest w stanie przyj. Klient moe okreli
preferowane przez siebie jzyki i typy mediw. Nazywa si to negocjacj treci i zostao szczegowo opisane w rozdziale 2.

22

Kup ksik

Pole ksik

Rozdzia 1. Podstawy REST

Implementowanie API
Wiesz ju mniej wicej, jak projektowa zasoby RESTful i jakich czasownikw HTTP uywa
do wykonywania rnych dziaa na tych zasobach, wic moemy przej do kwestii implementowania API i budowania usugi typu RESTful. Gwnym tematem tego podrozdziau jest:
Q API Javy dla usug RESTful (JAX-RS).

API Javy dla usug RESTful (JAX-RS)


API Javy dla usug RESTful suy do budowania i rozwijania aplikacji wg zasad technologii
REST. Przy uyciu JAX-RS mona udostpnia obiekty Javy jako usugi sieciowe typu RESTful,
ktre s niezalene od podstawowej technologii i uywaj prostego API opartego na adnotacjach.
Najnowsza wersja specyfikacji to JAX-RS 2.0. Od wersji JAX-RS 1.0 rni si przede wszystkim:
Q narzdziami do sprawdzania poprawnoci ziaren,
Q obsug API klienta,
Q moliwoci wykonywania wywoa asynchronicznych.

Implementacja specyfikacji JAX-RS nazywa si Jersey.


Wszystkie wymienione tematy zostay szczegowo opisane w kolejnych rozdziaach. Przedstawiam prosty przykad kawiarni, w ktrym mona utworzy zasb REST o nazwie CoffeesResource o nastpujcych umiejtnociach:
Q podanie szczegw zoonych zamwie,
Q tworzenie nowych zamwie,
Q sprawdzenie informacji o wybranym zamwieniu.

Tworzenie zasobu RESTful zaczniemy od utworzenia obiektu Javy o nazwie CoffeesResource.


Poniej znajduje si przykad zasobu JAX-RS:
@Path("v1/coffees")
public class CoffeesResource {
@GET
@Path("orders")
@Produces(MediaType.APPLICATION_JSON)
public List<Coffee> getCoffeeList( ){
// implementacja
}

1. W powyszym kodzie zosta utworzony niewielki obiekt Javy o nazwie


CoffeesResource. Klas t opatrzyam adnotacj @Path("v1/coffees") okrelajc
ciek URI, dla ktrej klasa ta obsuguje dania.

23

Kup ksik

Pole ksik

REST. Najlepsze praktyki i wzorce w jzyku Java

2. Nastpnie definiujemy metod o nazwie getCoffeeList(). Ma ona nastpujce


adnotacje:
Q @GET: oznacza, e metoda reprezentuje danie HTTP GET.
Q @PATH: w tym przypadku dania GET zasobu v1/coffees/orders bd
obsugiwane przez metod getCoffeeList().
Q @Produces: definiuje typy mediw zwracane przez ten zasb. W omawianym
przykadzie okrelono typ mediw MediaType.APPLICATION_JSON, ktrego
warto to application/json.
3. Inna metoda tworzca zamwienie wyglda tak:
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@ValidateOnExecution
public Response addCoffee(@Valid Coffee coffee) {
// implementacja
}

Jest to metoda o nazwie addCoffee() zawierajca nastpujce adnotacje:


Q @POST: oznacza, e metoda reprezentuje danie HTTP POST.
Q @Consumes: definiuje przyjmowane przez zasb typy mediw. W omawianym
przykadzie okrelono typ mediw MediaType.APPLICATION_JSON, ktrego warto
to application/json.
Q @Produces: definiuje typy mediw zwracane przez ten zasb. W omawianym
przykadzie okrelono typ mediw MediaType.APPLICATION_JSON, ktrego warto
to application/json.
Q @ValidateOnExecution: okrela, dla ktrych metod parametry i wartoci zwrotne
maj by sprawdzane. Szerzej o adnotacjach @ValidateOnExecution i @Valid pisz
w rozdziale 3.
Jak wida, zmiana prostego obiektu Javy w usug REST jest bardzo atwa. Teraz obejrzymy
podklas klasy Application, ktra bdzie zawieraa definicje komponentw aplikacji JAX-RS
wcznie z metadanymi.
Poniej znajduje si kod rdowy przykadowej podklasy klasy Application o nazwie CoffeeApplication:
@ApplicationPath("/")
public class CoffeeApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> classes = new HashSet<Class<?>>();
classes.add(CoffeesResource.class);
return classes;
}

24

Kup ksik

Pole ksik

Rozdzia 1. Podstawy REST

W podklasie tej zostaa nadpisana metoda getClasses() oraz dodano CoffesResource. W pliku
WAR podklasy klasy Application mog znajdowa si w katalogach WEB-INF/classes i WEB-INF/lib.

Wdraanie usug typu RESTful


Nastpnym krokiem po utworzeniu zasobu i dodaniu metadanych do podklasy klasy Application jest utworzenie pliku WAR, ktry mona wdroy w kadym kontenerze serwletw.
Kod rdowy opisywanych przykadw znajduje si w plikach do pobrania z serwera FTP.
Dodatkowo mona w nich znale szczegowe instrukcje, jak uruchomi te przykady.

Testowanie usug typu RESTful


Teraz moemy uy funkcjonalnoci API klienta JAX-RS 2.0 w celu uzyskania dostpu do zasobw.
W tym podrozdziale opisane s nastpujce tematy:
Q API klienta w JAX-RS 2.0,
Q uzyskiwanie dostpu do zasobw RESTful przy uyciu narzdzia cURL

lub rozszerzenia przegldarki internetowej o nazwie Postman.

API klienta w JAX-RS 2.0


W JAX-RS 2.0 dodano nowe API klienckie suce do uzyskiwania dostpu do zasobw RESTful.
Jego punkt pocztkowy to javax.ws.rs.client.Client.
Z tego nowego API mona korzysta w nastpujcy sposb:
Client client = ClientFactory.newClient();
WebTarget target = client.target("http://. . ./coffees/orders");
String response = target.request().get(String.class);

Jak wida w tym przykadzie, domylny egzemplarz klienta tworzy si przy uyciu metody
ClientFactory.newClient(). Za pomoc metody target() zosta utworzony obiekt WebTarget.
Z wykorzystaniem obiektw tego typu przygotowuje si danie przez dodanie metody i parametrw zapytania.
Zanim nie pojawiy si nowe API, dostp do zasobw REST uzyskiwao si w nastpujcy
sposb:

25

Kup ksik

Pole ksik

REST. Najlepsze praktyki i wzorce w jzyku Java

URL url = new URL("http://. . ./coffees/orders");


HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.setDoOutput(false);
BufferedReader br = new BufferedReader(new InputStreamReader(conn.
getInputStream()));
String line;
while ((line = br.readLine()) != null) {
//...
}

Przykad ten wyranie pokazuje, jak duego postpu dokonano w API klienckim JAX-RS 2.0
wyeliminowano konieczno uywania klasy HttpURLConnection, zamiast ktrej mona uywa API Client.
Jeli danie jest typu POST:
Client client = ClientBuilder.newClient();
Coffee coffee = new Coffee(...);
WebTarget myResource = client.target("http://foo.com/v1/coffees");
myResource.request(MediaType.APPLICATION_XML) .post(Entity.xml(coffee),
Coffee.class);

metoda WebTarget.request() zwraca obiekt javax.ws.rs.client.InvocationBuilder, ktry za


pomoc metody post()wywouje danie HTTP POST. Metoda post() pobiera jednostk z egzemplarza Coffee i okrela typ mediw jako APPLICATION_XML.
W kliencie zostaje zarejestrowana implementacja klas MessageBodyReader i MessageBodyWriter.
Szerzej na temat tych klas pisz w rozdziale 2.
W poniszej tabeli znajduje si zestawienie opisanych do tej pory najwaniejszych klas i adnotacji JAX-RS.
Nazwa

Opis

javax.ws.rs.Path

Okrela ciek URI, dla ktrej zasb serwuje metod.

javax.ws.rs.ApplicationPath

Jest uywana przez podklas klasy Application jako bazowy URL


wszystkich identyfikatorw URI dostarczanych przez zasoby w aplikacji.

javax.ws.rs.Produces

Definiuje typ mediw, jaki moe zosta zwrcony przez dany zasb.

javax.ws.rs.Consumes

Definiuje typ mediw przyjmowany przez zasb.

javax.ws.rs.client.Client

Definiuje punkt wejciowy dla da klienta.

javax.ws.rs.client.WebTarget

Definiuje cel zasobu identyfikowany przez URI.

26

Kup ksik

Pole ksik

Rozdzia 1. Podstawy REST

Klienty to cikie obiekty do obsugi infrastruktury komunikacyjnej po stronie klienta. Poniewa ich tworzenie i usuwanie to do czasochonne operacje, powinno si tworzy jak najmniej tych obiektw. Ponadto egzemplarz klienta zawsze trzeba poprawnie zamkn, aby nie dopuci do wycieku zasobw.

Uzyskiwanie dostpu do zasobw RESTful


W tym podrozdziale znajduje si opis rnych sposobw uzyskiwania dostpu do zasobw
REST i testowania ich przez klienty.

cURL
cURL to popularne narzdzie wiersza polece do testowania API REST. Za jego pomoc uytkownik moe tworzy dania, wysya je do API i analizowa otrzymane odpowiedzi. Poniej
znajduje si par przykadowych da curl wykonujcych podstawowe czynnoci:
danie curl

Opis

curl http://api.foo.com/v1/coffees/1

Proste danie GET.

curl -H "foo:bar" http://api.foo.com/v1/coffees

danie z dodatkiem nagwka za pomoc


parametru -H.

curl -i http://api.foo.com/v1/coffees/1

danie z wywietleniem nagwkw odpowiedzi


HTTP za pomoc parametru -i.

curl X POST -d'{"name":"JanKowalski",


"username":"jkow","phone":"412-344-5644"}
http://api.foo.com/v1/users

danie metod POST utworzenia nowego


uytkownika.

Cho narzdzie cURL jest bardzo pomocne, ma wiele opcji, ktre trzeba zapamita. Dlatego czasami lepszym rozwizaniem jest uycie narzdzia przegldarkowego, np. Postman albo
Advanced REST client.

Postman
Postman dla przegldarki Chrome to doskonae narzdzie do testowania i rozwijania API
REST. Zawiera przegldark danych w formatach JSON i XML oraz umoliwia podgldanie
da HTTP 1.1, jak rwnie ich wielokrotne wysyanie i zapisywanie na przyszo. Postman
dziaa w rodowisku przegldarki internetowej i umoliwia te przegldanie danych cookie.
Zalet narzdzia Postman w porwnaniu z cURL jest przyjazny interfejs uytkownika do wprowadzania parametrw, dziki czemu nie trzeba wpisywa caych polece ani skryptw. Ponadto
program ten obsuguje rnego rodzaju metody uwierzytelniania, takie jak uwierzytelnianie
podstawowe czy przy uyciu skrtw (tzw. digest access authentication).

27

Kup ksik

Pole ksik

REST. Najlepsze praktyki i wzorce w jzyku Java

Poniej znajduje si zrzut ekranu przedstawiajcy sposb wysyania zapyta w narzdziu


Postman.

Na powyszym zrzucie ekranu przedstawiono okno aplikacji Postman. Najprostszym sposobem na przetestowanie tego programu jest uruchomienie go w przegldarce Chrome.
Nastpnie naley wybra metod HTTP GET i wpisa adres URL api.postcodes.io/random/
postcodes. (PostCodes to darmowa otwarta usuga, ktrej dziaanie opiera si na danych geograficznych).
Otrzymasz odpowied JSON podobn do poniszej:
{
"status": 200,
"result": {
"postcode": "OX1 9SN",
"quality": 1,
"eastings": 451316,
"northings": 206104,
"country": "England",
"nhs_ha": "South Central",
"admin_county": "Oxfordshire",
"admin_district": "Oxford",
"admin_ward": "Carfax",

...}
}

Po lewej stronie okna znajduj si rne zapytania, ktre zostay dodane do kolekcji, np. pobranie wszystkich zamwie kawy, pobranie jednego konkretnego zamwienia, utworzenie
zamwie itd. na podstawie rnych przykadw z tej ksiki. Moesz te tworzy wasne kolekcje zapyta.

28

Kup ksik

Pole ksik

Rozdzia 1. Podstawy REST

Pobieranie przykadw kodu


Pliki z przykadowym kodem rdowym mona pobra z serwera FTP wydawnictwa Helion, pod adresem
ftp://ftp.helion.pl/przyklady/restja.zip.

Wicej informacji na temat narzdzia Postman znajduje si na stronie http://www.getpostman.com/.

Inne narzdzia
Oto par innych narzdzi, ktre rwnie mog by przydatne w pracy z zasobami REST.

Advanced REST client


Advanced REST client to kolejne rozszerzenie przegldarki Chrome oparte na Google WebToolkit i suce do testowania oraz tworzenia API REST.

JSONLint
JSONLint to proste internetowe narzdzie do sprawdzania poprawnoci danych w formacie
JSON. Gdy wysya si dane w tym formacie, dobrze jest sprawdzi, czy s sformatowane zgodnie ze specyfikacj. Mona to zrobi wanie za pomoc narzdzia JSONLint. Wicej informacji na jego temat znajduje si na stronie http://jsonlint.com/.

Najlepsze praktyki projektowania zasobw


W tym podrozdziale znajduje si opis niektrych najlepszych praktyk projektowania zasobw
RESTful:
Q Programista API powinien uywa rzeczownikw, aby uatwi uytkownikowi
poruszanie si po zasobach, a czasownikw tylko jako metod HTTP. Na przykad
URI /user/1234/books jest lepszy ni /user/1234/getBook.
Q Do identyfikacji podzasobw uywaj asocjacji. Na przykad aby pobra autorw
ksiki 5678 dla uytkownika 1234, powinno si uy URI /user/1234/books/
5678/authors.
Q Do pobierania specyficznych wariacji uywaj parametrw zapyta. Na przykad
aby pobra wszystkie ksiki majce 10 recenzji, uyj URI /user/1234/
books?reviews_counts=10.
Q W ramach parametrw zapyta w razie moliwoci zezwalaj na czciowe

odpowiedzi. Przykadem moe by pobranie tylko nazwy i wieku uytkownika.


Klient moe wysa w URI parametr zapytania ?fields zawierajcy list pl,
ktre chce otrzyma od serwera, np. /users/1234?fields=name,age.

29

Kup ksik

Pole ksik

REST. Najlepsze praktyki i wzorce w jzyku Java

Q Zdefiniuj domylny format odpowiedzi na wypadek, gdyby klient nie poda,

Q
Q

Q
Q

jaki format go interesuje. Wikszo programistw jako domylnego formatu


uywa JSON.
W nazwach atrybutw stosuj notacjWielbdzi lub ze znakami podkrelenia _.
Dla kolekcji zapewnij standardowe API liczce, np. users/1234/books/count,
aby klient mg sprawdzi, ilu obiektw moe si spodziewa w odpowiedzi.
Bdzie to te pomocne dla klientw uywajcych stronicowania. Szerzej na temat
stronicowania pisz w rozdziale 5.
Zapewnij opcj eleganckiego drukowania users/1234?pretty_print. Ponadto
nie powinno si buforowa zapyta z parametrem drukowania.
Staraj si minimalizowa komunikacj przez dostarczenie jak najpeniejszych
informacji w pierwszej odpowiedzi. Chodzi o to, e jeli serwer nie dostarczy
wystarczajcej iloci danych w odpowiedzi, klient bdzie musia wysa kolejne
dania, aby zdoby potrzebne mu informacje. W ten sposb marnuje si zasoby
i wyczerpuje limit da klienta. Szerzej na temat ograniczania liczby da klienta
pisz w rozdziale 5.

Zalecana lektura
Q RFC 2616: http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html.
Q Model dojrzaoci Richardsona: http://www.crummy.com/writing/speaking/
Q
Q
Q
Q

2008-QCon/act3.html.
Implementacja JAX-RS Jersey: https://jersey.java.net/.
InspectB.in: http://inspectb.in/.
Postman: http://www.getpostman.com/.
Advanced REST Client: https://code.google.com/p/chrome-rest-client/.

Podsumowanie
W tym rozdziale przedstawiam podstawowe zaoenia technologii REST, opisaam API CRUD
oraz pokazaam, jak projektowa zasoby RESTful. W przykadach uyte zostay adnotacje JAX-RS 2.0, za pomoc ktrych mona reprezentowa metody HTTP, i API klienckie, przy uyciu
ktrych mona odnosi si do zasobw. Ponadto zrobiam przegld najlepszych praktyk projektowania usug typu RESTful.
W nastpnym rozdziale znajduje si rozszerzenie tych wiadomoci. Bardziej szczegowo poznasz zasady negocjowania treci, dostawcw jednostek w JAX-RS 2.0, techniki obsugi bdw,
sposoby kontrolowania wersji oraz kody odpowiedzi REST. Ponadto dowiesz si, w jaki sposb serwer moe wysya do klienta odpowiedzi przy uyciu strumieniowania i kawakowania.

30

Kup ksik

Pole ksik

Skorowidz
A
adnotacja
@Asynchronous, 72
@Consumes, 34
@DefaultValue, 90
@Produces, 33
@Suspended, 72
@VerifyValue, 50
@WebFilter, 82
NotNull, 50
Valid, 49
ValidateOnExecution, 49
adnotacje JAX-RS, 26
adres URL, 35
AMQP, Advanced Messaging Queing Protocol, 74
Apache Log4j, 47
API, 23
CRUD, 30
GitHub, 113
Graph portalu Facebook, 114
klienta, 25
reagujce na bieco, 98
REST, 46, 66, 68
REST Facebooka, 69
REST portalu GitHub, 111
REST portalu Twitter, 117
SSE, 102
aplikacje
chmurowe, 107
konsumenckie, 56
macierzyste, 57
sieciowe, 57

Kup ksik

architektura mikrousugowa, 108


niezaleno, 109
podzia funkcjonalnoci, 109
prostota, 108
skalowalno, 109
wyodrbnienie problemw, 108
architektura REST, 59
asynchroniczne
obsugiwanie zada, 74
przetwarzanie, 70
atrybut
href, 93
method, 94
rel, 94
autoryzacja, 54

B
Bean Validation, 49
bezpieczestwo, 45
bezpieczestwo metod, 18
bezstanowo, 16
biblioteka Log4j, 47
bd
406, 34
415, 34
420, 87
429, 80, 85
BOSH, 107
buforowanie, 64, 69, 86
buforowanie na serwerze, 70

Pole ksik

REST. Najlepsze praktyki i wzorce w jzyku Java

C
CRUD, create, read, update, delete, 19
czas
odpowiedzi, 64
ycia tokenu, 58
czasowniki, 113
czasowniki HTTP, 17, 21

D
dane
JSON, 39
osobowe, 48
dodanie metadanych, 25
dokumentowanie usug, 95
dostawca
tosamoci, 53
usug, 53, 56
jednostek, 35
dostp do zasobw REST, 25, 27
dyrektywa QoS, 100
dyrektywy nagwka Cache-Control, 65
dziaanie gniazd sieciowych, 105

E
eksplorator API Graph, 115
elementy architektury REST, 59

F
filtr
ograniczajcy dania, 82
rejestrujcy, 46
format JSON, 39
funkcje interfejsu EventSource, 102
funkcjonalnoci gniazd sieciowych, 106

G
gniazdo sieciowe, WebSocket, 104
grant autoryzacji, 57

H
HATEOAS, 18, 92, 93

I
idempotentno metod, 18
identyfikacja
metainformacji, 48
metod, 20
osoby, 48
reprezentacji zasobu, 22
identyfikator URI, 40
identyfikator URI zasobu, 19
implementacja
OAuth, 58
API, 23
informacje o awarii, 47
interfejs
EventSource, 102
ExceptionMapper, 52
Future, 71, 73
MessageBodyReader, 35
MessageBodyWriter, 35
internacjonalizacja, 91
IPN, Instant Payment Notification, 104

J
JavaScript, 102
JAXB, 39
JAX-RS, 23, 49
Jersey, 38, 58, 103
JSON, 38
JSON Patch, 76

K
klasa
AccessData, 83
ChunkedInput, 38
ChunkedOutput, 37
CoffeesResource, 49
Filter, 82
JSONArray, 39
JSONParser, 39
LoggingFilter, 47
RateLimiter, 81, 84
ResourceError, 52
ResponseBuilder, 43
StreamingOutput, 36
VariantListBuilder, 34

122

Kup ksik

Pole ksik

Skorowidz

klasy JAX-RS, 26
klient, 57
kod
200, 68
202, 73
304, 67, 69
406, 34
415, 34
420, 87
429, 80, 85
odpowiedzi, 42, 43, 50
kolejka wiadomoci, 74
komunikacja na bieco, 106

L
liczba da, 80
lista wariantw reprezentacji, 34
logowanie pojedyncze, SSO, 53
lokalizacja, 91

M
maper wyjtkw, 51
metadane, 24, 91
metoda
build(), 34
doFilter(), 84
getBookInJSON(), 35
getBookInXML(), 35
getSize(), 36
isCancelled(), 71
isDone(), 71
isReadable(), 36
isWriteable(), 36
JSON Patch, 76
prepareResponse(), 73
readFrom(), 36
selectVariant(), 34
writeTo(), 36
metody
HTTP, Patrz danie
idempotentne, 18
uwierzytelniania, 27
mikrousugi, 107110
model
dojrzaoci Richardsona, 16
PubSubHubbub, 99
strumieniowania, 100

N
nagwek
Accept, 33, 41
Cache-Control, 65, 66
Content-Language, 91
Content-Length, 37
Content-Type, 33
ETag, 65, 68
Expires, 65
Last-Modified, 65
Retry-After, 80, 84
X-RateLimit-Remaining, 81
nagwki buforowania
silne, 64
sabe, 64
narzdzie
Advanced REST client, 29
cURL, 27
JSONLint, 29
Postman, 27, 29
negocjacja treci, 32
poprzez adres URL, 35
poprzez nagwki HTTP, 32
niezawodno, 16
numer wersji, 41
w nagwku Accept, 41
w parametrze zapytaniowym, 41

O
OAuth, Open Authorization, 54
OAuth 1.0, 57
OAuth 2.0, 58
obiekt
cacheControl, 66
Variant, 34
obsuga
bdw, 51, 113, 116, 119
kodw odpowiedzi, 50
wyjtkw, 50
odpowiedzi REST, 31
ograniczanie liczby da, 8082, 114, 117
okrelanie
wersji, 40
wersji API, 41
OpenID Connect, 59
operacje
asynchroniczne, 70
dugotrwae, 70

123

Kup ksik

Pole ksik

REST. Najlepsze praktyki i wzorce w jzyku Java

P
pliki WAR/EAR, 108
POJO, 39
poprawno usug REST, 49
portal Facebook, 114
czynnoci zasobw, 116
obsuga bdw, 116
ograniczanie liczby da, 117
wersjonowanie, 116
portal GitHub, 111
akcje zasobw, 113
obsuga bdw, 113
ograniczanie liczby da, 114
pobieranie informacji, 112
wersjonowanie, 113
portal Twitter, 117
dziaania na zasobach, 118
obsuga bdw, 119
wersjonowanie, 119
POX, Plain Old XML, 17
procedura
bookavailable, 102
newbookadded, 102
procedury nasuchowe, 102
proces
asynchronicznego przetwarzania, 71
autoryzacji, 55
projektowanie
wydajnych rozwiza, 63
zasobw, 29, 31
protok
AMQP, 74
ATOM/RSS, 99
OAuth, 55, 56
SAML, 54
WebSocket, 104
XMPP, 106
przetwarzanie
asynchroniczne, 70
danych JSON, 39
niskopoziomowe, 39
PuSH, 99, 104

Q
QoS, Quality of Service, 100

R
rejestrowanie
informacji, 46, 47
treci, 48
da, 86
REST, Representational State Transfer, 15
RESTEasy, 69
rodzaje
odpowiedzi REST, 31
stronicowania, 88
rola
identity provider, 53
klient, 56
principal, 53
service provider, 53
serwer, 56
uytkownik, 56
rozszerzalno, 94

S
SAML, Security Assertion Markup Language, 53
serializacja zasobw, 35
serwer, 100
skalowalno, 16
SOAP, Simple Object Access Protocol, 15
sondowanie, polling, 98
sondowanie spowolnione, 107
sprawdzanie poprawnoci
danych, 29
usug REST, 49
SSE, Server-Send Events, 100
SSL, 58
SSO, Single Sign-On, 53
staa REQ_LIMIT, 82
status
COMPLETED, 75
PROCESSING, 75
statyczna negocjacja treci, 34
stronicowanie
czasowe, 88
kursorowe, 89
odpowiedzi, 87
offsetowe, 88
struktura ConcurrentHashMap, 83
strumieniowanie, 86
systemy rejestrowania danych, 48
szyfrowanie, 58

124

Kup ksik

Pole ksik

Skorowidz

T
tablica JSONArray, 90
technologia
BOSH, 107
OpenID Connect, 59
REST, 11, 97
SOA, 15
termin wyganicia, 74
testowanie
usug, 95
typu RESTful, 25
token, 54
dostpu, 57
odwieania, 57, 58
tworzenie
API REST, 29
asynchronicznego zasobu, 72
listy wariantw reprezentacji, 34
zasobu RESTful, 23
typ MIME, 34
typy
nagwkw buforowania, 64
znacznikw ETag, 68

U
uchwyt sieciowy, WebHook, 103
ukad projektu, 81, 90
unikanie sondowania, 86
usuga
GitHub, 104
IPN, 104
usugi typu RESTful, 19
utrata poczenia, 101
uwierzytelnianie, 27, 53
uzgodnienie, handshake, 107
uycie gniazd sieciowych, 106

W
wdraanie usug typu RESTful, 25
wersjonowanie API, 40
weryfikacja poprawnoci danych, 50
wze komunikacyjny, 99
wiadomo
SSE, 101
SSE z identyfikatorem, 101

wizanie
identyfikatora ze zdarzeniem, 101
nazw ze zdarzeniami, 101
widoczno, 16
WSDL, Web Service Description Language, 15
wyjtek, 50
CoffeeNotFoundException, 51
wykrywalno, 45
wysyanie
nagwka Accept, 42
numeru wersji, 41
wzorce REST, 42

X
XMPP, 106

Z
zaciemnianie danych poufnych, 47
zasady
buforowania, 64
projektowania, 79
zasoby
asynchroniczne, 73
REST, 17
RESTful, 19, 22
zdalne wywoywanie procedur, 17
zdarzenia
SSE, 100103, 107
uchwytw sieciowych, 103
ziarno JAXB, 39
znaczniki ETag, 67, 68

dania
curl, 27, 85
w ptlach, 86
danie
DELETE, 21
GET, 21
HEAD, 22
OAuth, 55
PATCH, 74, 76
POST, 21, 26
PUT, 21
Upgrade, 104

125

Kup ksik

Pole ksik

REST. Najlepsze praktyki i wzorce w jzyku Java

126

Kup ksik

Pole ksik

Vous aimerez peut-être aussi