D> E > " E>W= D 1^ ETS, 11/02/2016
] 2016 A=< H, > T $. . &> = K > > = >, > =Y >R, > >S A=<, I > > Z P=. A=< H, > T $ HHH.=H<.> @=H<.> +55 (11) 2626-9415
- !
E>W= D A=<, > > CV C>TS, E= > T > >T TS S T TZ Z C" C" $C $C-1 -1.. = = X X H H $ $ E E H. A >U> > CV C>TS > >TS > =R. $<: ://HHH.=<. ://HHH.=<.>//>= >//>=
A >T... A V > = =, > => > V, > I= > [. > =P?
C> ? D , U > >> P [. E > => =>, > =K> S K > = =, =, = = A=<. ES, V => [ S =TS G= > X >, > >TS U V C> " F<. O X : ://=.H</>/
C> >= =? V => [ = => S >= XI> TS, > =K V > K. E > ->= =@=H<.>.
A = E > = (>> , > ) P > =, , X K > > =. A = = > >U> > >TS ". C>= F< H!
>P 1 TS 2 E 2.1
C=- .......................................................................................... 13
2.2
= ....................................................................................................... 14
2.3
C ............................................................................................................15
2.4
> ..................................................................................... 16
2.5
> > > .................................................................................. 17
2.6
CX > .................................................................................17
3 O E E=? 3.1
E= > ........................................................................ 18
3.2
...................................................................................................... 19
3.3
%U ....................................................................................................... 24
4 E 'A 5 %= > 5.1
&W= 0 - ' ..............................................................................................32
5.2
&W= 1 - ...................................................................................... 34
5.3
&W= 2 - .............................................................................. 35
5.4
&W= 3 - AE'A ................................................................................... 36
6 C=S
CW= 1
TS V > P = > E=, S U >>? % > = > TS > >, = >X . % = >= > =K TS? & =, > P > U [ > > >=> > E= > " >. V P > ? E U > S > = P , > . >>, > > > H P > => > K = >>. & , > > > =TS >>. ' U U > > , = =, > X. A > = > > > > > = => > >. & [=> , > > > > , >, =, C, . ' > =, >> > .
HHH.=H<.>
10
' > = > , => >, >, > > U >= >= > =TS P >=I. A=> U W= >> > > > = >U> ITS > >. C> > I> K > > IV T, >, I>=, > > > > >> W= >> > > = W, > => >. E IV U > > > >== >=. C> V > =X, X = > Q =TZ >. A=U> , A (A= >> ) > ` =Ia X >, > > = = I > X. G > > H==, H, G= F< > > > >= >= > > > =TZ . ' , = > => > ( ), =K > > > > T. DK , > P= = > = S P > U, > >U> > = > > P > IV K >=. A=U> , P =K> => > >= > , =S S > > => > = > > K . A >=W > = > S >=> > > K > > . S S > A ? E= P
HHH.=H<.>
11
W >> A > = >. A =>, >: \ \ \ \ \ \
>= EIW= E=P= >= G== E > >_
W> > => > >S. EI, > I S > > = > > >TZ S P S =K, > >T P-= > > => W =TZ K >=. B , = X > > >= = E " > >=>TS =TZ > . > = >U> > E, => [ Z > > U .
HHH.=H<.>
12
CW= 2
E A > > , E W 2000, .D > > J F= 1. ' = >=KTS > >= P > constraints. E constraints > > > > = Z > > >=, = >>. > > >= contraints?
2.1. C=- A = W constraint U = > >. E S >, I>= > > TS >> >K> back-end =TS. ' S > >> P P back-end. > =TS == = > . A=> P > > >=, >H< > A=" A E= >> => > = > =. 1. ://HHH.../N=/ HHH.=H<.>
13
2.2. = E W Z TS S =TS > TZ , , TS >TZ P = > = . ' = >=, U>, U > >> cookies >K> Z = . E > > =, >> . > cookies U =KTS > > P > = > = =TZ. A I = > >= TS.
= > >> , => > Z = =, == . EI> P > S, I>=, > >= Sticky Session2 > > P >=, > > W=, = >K> >TZ =.
2. ://..//2.2/>/>IJ=.>= HHH.=H<.>
14
F=, =K > >= >TS stateless , A W > =, = ==. > > , > W=, = U => > S > >TS .
2.3. C > >= >, > > E > > W cache. C => > > = => >P ( proxies , gateways / = ) = =W cache > . ' = > > constraint TS headers `Ia (S 1.0 ) / `-=a (S 1.1 ).
> TZ = == = cache , S > > >
HHH.=H<.>
15
TS. E >= > I => S P.
2.4. > C> > U , > E > U W, > > U > > >. B T > > >= = Z >. = > , => I > : \ \ % \ Hypermedia >=> =K , > A = > TS >U> =KTS >U X . &X > >= > Z . > > = > , > I>= > > >= > > ->>. > = = , > I>= , =, . D> > > > >=TS . AI > I>=:
>= `=a > U TZ > I >>. F> > > >=> V P > TZ = > >U = . HHH.=H<.>
16
2.5. > > > C> > == P > W, > > E => >P > => =. => >P S =K > =. U = =, > V G= > > >> D&, > V > S K > cache. =K > S U . X > stateless cache , =K > => > > =. E = U > => > > > > > =TS, > = T.
2.6. CX > V > P > U = P => H TS . A > = => S I=, U > H = > >>. CX > > = >=, = = = > =. EI>= S " A=.
HHH.=H<.>
17
CW= 3
O E E=? V P T > E E=, S U? &S , > S > >> U >P= >. % , > A =TS > E E=? D > > , U V K A E=. A=U> , U > V V >= = >> >. > >= W X > >, V =K > E, P >> > V = > >=>TS >> W, V E=. A S = S =, = K V > =K >= . >U> I = E > U > P.
3.1. E= > AU , X > W > > = . A S > > =KTS , > > > > P.
HHH.=H<.>
18
> > > =K >=>TS E: = . > = >U> = TS > A E=. ' S U = = W, > > = W V >=> > E=.
3.2. > U =K > [ > W. A FC 3986 => W > . B>, > >=> > > , U , > U => =K > A. EI>=: /cliente/1 /produto/1 /cliente/1/notificacao
> =K > > , S > > TS I > . A= = > =KTS > W, U>, S U => P= V > =. > = V, > > = > > W . &S > > = >H<, > U = > S >= > >=>TS =. @RestController @RequestMapping ("/cliente") public class ClienteResource { @RequestMapping (value = "/{id}" , method = RequestMethod .GET,
produces = "application/json" ) public ClienteRepresentation buscar (@PathVariable ("id") Integer id ) { System .out.println("Retornando cliente..." ); return new ClienteRepresentation ("João da Silva" );
HHH.=H<.>
19
} }
A >=, X > =K => W TS > . ' = > = U: A TS @RestController > = =K > = > W > E. A TS @RequestMapping = ClienteResource > = P > . O >> > >= P > > >. "P TS @RequestMapping >U buscar , > => . A > U >> > {id}. > = W value > =, > > = >> `/=/LMa. O >U> T produces , > TS = > > "'&. EI , > > = >= : { "nome": "Joao da Silva" }
U > >= >TS > > "'& (=> "'& ), > P > >T =. V = `TSa > >> . O > V > >= = V >. > U = > = (I: H), I > U > >> =. E >> U > TS > > . A >> S > = => > >, > I>=, > = .
HHH.=H<.>
20
TZ A TZ > >= > P >, > %$, "'&, %$ . V = > TS > =KTS hypermedia (> X > ). > > =, > I>= `/=/1a, > >. &= , X > > TS > > "'&, > X W> >U> P-= > >>. >[== TZ (> > TS [) . W=, V header `Aa = U TS > . A I I > > =.
& > , > > > TS . A > K > P S > "'& %$, S > =K > A =, V => [ =.
HHH.=H<.>
21
%$ ' %$ ( %< $) U > => >TS > = 3C (= C>) > > TS = . E= U =K > > > S >TZ > U >> >K> >>. AI, > > > %$:
10 Alan Turing 23/06/1912 Matemático Manchester Inglaterra
& >TS %$ U > > > P, > > = > > > >= => > > ". > %$ U . TS >TS, > P , K > overhead P. B , > =K > =TS > I, > .
"'& ' "'& (" ' &) > > = TS > > > >= =.
HHH.=H<.>
22
C> V , "'& P = Q => ", U>, > =K = V . I > I>=: { "id": 10, "nome": "Alan Turing", "nascimento" : "23/06/1912", "profissao" : "Matemático", "endereco": { "cidade": "Manchester", "pais": "Inglaterra" } }
"'& S >> X > > =P> %$. & TS U > > >=. D => W "'& , = : \ $ >= \ A= > >= \ P >H< (=> >H< ") \ > K > P , "'& P > > >. D > >, %$ "'&, S > =K> =TZ, P > = I > > . => = >=, "'& > > .
HHH.=H<.>
23
3.3. %U A FC 72313 > 8 >U > =K TS > A E=. E >U >R TZ W > > > . D 8 >U, I > => 4 > .
GE ' >U GET U =K I > . E= U >, , K U I > , = > P >>. EI>=: GET /cliente/1 HTTP/1.1
E > P > TS `/=/1a.
' =K TS > > TS. EI>=: POST /cliente HTTP/ 1.1
João da Silva ...
' >U PUT U =K > > =K > > . E> = P > W, = >U> =K > > TS, I>= = > = =K.
3. ://HHH..//3986.I HHH.=H<.>
24
DE$EE ' = > > = >TS > > . EI>=: DELETE /cliente/1 HTTP/ 1.1
A > >U =K> > CD (Create, Read, Update Delete) >=TS , = S > > > > >U > >U> > TS >R > > . > > >=, = TZ > > =. > > = > > . @RequestMapping (value = "/{id}" , method = RequestMethod .DELETE,
produces = "application/json" ) public void excluir (@PathVariable("id" ) Integer id ) { System .out.println("Excluindo o cliente..." ); }
>> X > > I>= > S , > =. B> >> , >U method , = TS > > I I=S > > . D >, TS DELETE HTTP P > >U excluir . A=U> >U, > > TS, > TS. I > > = . \ \ \ \ \
1II - >TZ 2II - 3II - > 4II - E = 5II - E
HHH.=H<.>
25
> >, I> X W > = > > TZ >=TS . ' > U > => > X . > > U TS > RuntimeException , > X = U > TS. > I>=: @ResponseStatus (value = HttpStatus .NOT_FOUND) public class ResourceNotFoundException extends RuntimeException { }
T TS ResponseStatus . E= > > = X ITS =T. & , > X 404 (Not Found) P , > = S . V > = > =T ITS. ES > X I>= I: @RequestMapping (value = "/{id}" , method = RequestMethod .GET,
produces = "application/json" ) public ClienteRepresentation buscar (HttpServletResponse response , @PathVariable ("id") Integer id ) { System .out.println("Cliente não encontrado..." ); throw new ResourceNotFoundException (); }
=KTS ITS >> > V P =. A > =K X > >=, > U = > U P TS => > E=. '>, I> [> =, > V P >T =K > . A=U> > U , > > [ >=> > A E=. D =, - web linking , TS [, queries , caching ,
HHH.=H<.>
26
TZ T. C> > = > W. A > >=>TS , [> >H< > =K. V P = > " EE =, V >U> TS "A-. E= > >> = > , I > W> .
HHH.=H<.>
27
CW= 4
E 'A A V P > >=K > E, > => Z S > =. =K V P = = > = > 'A, > P > S = U >= > (E 'A). D > = 'A ( Simple Object Access Protocol) > E. D , > = `=a? A U >TS, > K, U > , E, > >, U > >= = 'A, , U > =. S I S? % >, , S >= > > > > ' ( Plain Old XML), > > > >> %$ =K > = . E >= U > > => C ( Remote Procedure Call) > > =TS > E, =K > =-.
HHH.=H<.>
28
A S U > > >> =K "'&. & , > > >> >= = (C), > > >> . =K V > [ U = C. ' C U > >= > T> =KTS >U ITS > >. > I>=, > = " >U, C U > >= =KTS >U ITS > > ( >) 4. ' 'A U >, , = IZ > U >U " ( =>), = > I > > > %$. D , U P = = E 'A > =U> > > S >. E > = > > >= =. O P =KTS > >= > W E? ' >= C, >=> = 'A > > U TZ > -*, U > ? ' = > TS S W > W. A U >= E I > > > P > = > TS. $>- S I > >= “One size fits all” , , E 'A S U = =TS =>. % S P = A > E= > `W=a > > =, , = > > W P > => E=.
4. > DW, W >. AH . > HHH.=H<.>
29
C> > > S, > `%= % a 5 XI> W=, > > X > > W= > A = => E=.
5. ://>H=.>/=/%J%=.>= HHH.=H<.>
30
CW= 5
%= > A J F= I = > A E= = > constraints > =6 , > >, K hypermedia , P, > K > > > > > >=. E > E, > >TS > A E= = => S constraints F=. A , > > > =, > > = >, > >= > . ' >= $ 7 > 4 W > W A > = > > >. ' W 0, 1 2 =K > > >= V, S > P >=>, U>, = V >> S S E=. & I > S W:
6. ://J..>/=/2008/>JI 7. ://HHH.>>J.>/=/ HHH.=H<.>
31
%= > F: ://>H=.>/=/%J%=.>=
5.1. &W= 0 - ' V > P = > => = > A >= . A W= > E Z, > A > E= > W= >. & P, = U =K > >> V U > >= = > > C. & W=, > > =K > > > %$, "'& . O > =>, > >, S U > >> S > > E. I > I>= A > W= 0: POST /salvarCliente HTTP/ 1.1
João da Silva ...
A =KTS > POST HTTP TS > , S P >= > . C> P , HHH.=H<.>
32
> >= > . I > = > > > C > E. RPC (POX) Verbo HTTP
URI
Ação
GE
/C=/1
=K
'
/=C=
C
'
/=C=/1
A=
GE/'
/=C=/1
>
REST Verbo HTTP
URI
Ação
GE
/=/1
=K
'
/=
C
/=/1
A=
DE$EE
/=/1
>
& = > =K T >=> > > =K > . > => > , U >=TS X . CX > S > >= > = =TS, > => gateway proxy => > . > I>=: GET /buscarCliente/1 HTTP/1.1
HTTP/1.1 200 OK
HHH.=H<.>
33
CLIENTE NÃO ENCONTRADO 404
A >> = = S , > >TS => (200 '#), , I > T >R = TS = =TS.
5.2. &W= 1 - %= > ' > IZ> = >U > (C). E >= > K U > TS => = , = > = > >U > P-=. > > > TS E U >=> =KTS >> TS > > A. > I>= > W= > : POST /cliente HTTP/ 1.1
João da Silva ...
E X U > >= > S , > U > >=> `C=a. %= > , > >U > , TZ P > . O > XI> S.
HHH.=H<.>
34
5.3. &W= 2 - & W=, I I > = I > = >R A, , > =K > X = > . A =KTS >U > ( GET, POST, PUT DELETE), > > X , >> >=> TS > > > A. C `=a I>= , I >=> > A W= 3 >. C > =: POST /cliente HTTP/ 1.1
João da Silva ...
V : A >> > S U = S ? >, = T? A >> TS >= >, P >U> > >> = = , > I: HTTP/1.1 201 Created
Location: /cliente/1
O > 2 : ' > U =KTS `201 Ca. C> = TS > , > > > > . A=U> , > > U T header `$a. E header > > = T W=. C> T header `$a (/=/1), X > K :
HHH.=H<.>
35
GET /cliente/1 HTTP/1.1
HTTP/1.1 200 OK 1 João da Silva ...
C> `/=/1a, =K > (GET ) > `200 '#a > > >> >>. C P >TS , V =K >U DELETE , > > I: DELETE /cliente/1 HTTP/ 1.1
A >>, P > > >> > .
5.4. &W= 3 - AE'A E W= U > > [ = E. EI > U => AE'A ( Hypermedia as the Engine of Application State ) = = > > A. E> = =, F= I > = A S =K> AE'A S > E=, >> >, V > [ E > > W. A > = S > >=, AE'A U > P . E= > > => = > TS hypermedia , > > > = => > . A I > >= .
HHH.=H<.>
36
> > U =TS >> P > . ' > U =K > TS > U = (I: > P %$). A >> K > > X %$ ( Hypermedia Text Markup Language), > =. I>=, > [ index.html: Produtos Clientes Contato Carrinho
& X %$ >, > T , K = %$ (>=> > H) = I > GET > href.
HHH.=H<.>
37
C> > > , H P K > GET ? P = TS %$ K K > , > >> GET Q href , , I > U- H . C>T> S > >= AE'A. C> X > , TS hypermedia = > > > , > = > >>. C U > > (> P %$) V ( =<). D , > > > = X > > ( V, `a). ' >> P = =< => > , > > > > . >, > %$ U > => > =TZ > W >= AE'A. U>, > >=> > A = >> >? E = W >? => > = > > W >=, X > P > =KTS = (H). ' => , => hypermedia %$, > > = , = => [ = , , S , > = P > > > > => =, > H, proxies , gateways , = . C >> > A, V A => = > = > =KTZ = =. V P > > > = > > > P > KTS? "P > > > >= P, > > T > ? HHH.=H<.>
38
C A E= A > > constraints = AE'A. C> , V P = =T W >, A => =P, IW > W . C A > > > = > W U > > , >= >= =K > =TZ S > >= C. & =, S > = > > TS = A E=, > P I > > > = > > = > W. I>=, I > TS > A =K hypermedia: GET /cliente/1 HTTP/1.1
HTTP/1.1 200 OK 1 João da Silva
& I>= >, > > `/=/1a. ' > TS W TZ > =K. O = =, > S (/=/1), U>, `=a > = `=a, > > >R , , = =K >U DELETE . C> >, = A P => `=a `a = > > =<.
HHH.=H<.>
39
A >=> > A > hypermedia = TS = >= => =K. C A W = > =, U>, = Z > =K, > X %$, A'% B U >> TS > => X. >> TS I>= > > >= C, > > = A = > W TZ, > > C > 'A, V > TZ = >> > =. D , > TS A > >= S U > S =, V >. A> A=< ->= , > = > .
HHH.=H<.>
40
CW= 6
C=S C> = = > =K V > >! =K V > > U V . =>, I> P > S K> >=> > X P E. , U > V = > P. % => > = > P = > A E=. &S => S > > =. =>, = S W >= =>, U>, T > >> > V X A=< > = [ >, V >=> >= > W= =. D > >, V : \ C> > > > > = \ C> > K >= \ CW =TZ b >= b EIW= b E=P= b E_ \ DT E E= HHH.=H<.>
41
\ ' > A E= A \ DT 'A E \ E > >_ E = W > >! ;)
HHH.=H<.>
42