A quick introduction to REST with RESTeasy and the integration client-to-server using jQuery.
1 of 43
More Related Content
2.5tier Javaday (italian)
1. Web 2.0 o 1.0?
Ugo Landini & Luigi Fugaro, Jug Roma
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
2. 2.5 tiers
Agenda
Whats hot
Un po di storia
2.5 tier
REST con RESTEasy
Rich client con JQuery
Conclusioni
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
3. C竪 chi fa cose del genere oggi...
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
4. 280slides, come hanno fatto?
Replica dellintero stack Cocoa di Apple nel
browser (Cappuccino)
Creazione di un nuovo linguaggio, a partire da
Javascript: Objective J
Creazione di un equivalente dellInterface Builder di
Apple
Binding evoluti, eventi, ecc.
IDE completamente browser based (Atlas)
Non vogliamo arrivare a tanto, ma ...
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
5. 280slides, come?
Un po di storia
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
6. Evoluzione
Dal Paleolitico al Neolitico, passando per il Mesolitico
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
7. Paleolitico
Applicazioni Client server
Two tiers
Fat Client (Visual Basic, Delphi, ecc.)
Query dirette sul DB
Manutenibilit complessa
Performance elevate
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
8. Mesolitico
Entra in scena il Web, che di fatto uccide il Client/
Server
Thin client e non pi湛 Fat client
Three tiers (o pi湛 precisamente, n-tiers)
Separazione logica ed anche 鍖sica
Anni di gloria degli Application Server
Problemi di scalabilit impliciti
dif鍖colt ad essere stateless
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
9. Patterns
Perch竪 utilizziamo MVC server side?
Per motivi storici
Javascript era un incubo, ed i browser avevano
problemi anche con dellhtml semplice
Ormai 竪 questione di abitudine
Ci sembra normale che la GUI venga generata dal
server
Non lo 竪
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
10. Mesolitico
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
11. Neolitico
Ajax ha reso possibile oggi dei Rich Client, e
dunque un ritorno ad un 3-tier
Per i Rich Client ci sono per嘆 molte tecnologie a
disposizione
Tecnologie come JavaFX, Flex, Silverlight,
OpenLaszlo, ...
ma anche GWT, JSF, Wicket, ed altre librerie Java-
oriented
ognuna con pro e contro diversi
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
12. Stateless vs Stateful
Stateless 竪 considerato da sempre il miglior modo
per scalare
Le tecnologie che creano un mapping arti鍖cale fra
client e server sono stateful per natura
Stateful: JSF, Wicket
no scalability, dimensionamento dif鍖cile
Stateless: Javascript diretto, generatori di Javascript
(GWT)
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
13. Neolitico
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
14. Neolitico
Nel Neolitico 竪 decisamente possibile fare rich
client solo con il browser
Javascript (con JQuery) 竪 la tecnologia abilitante
JSon il formato dati, Ajax il protocollo, REST
larchitettura
HTML 5 a seguire, 竪 completamente in linea con
questa architettura
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
15. Come si realizza un 2.5 tier
JQuery
Libreria Javascript per consumare servizi REST e creare
componenti riusabili
si, funziona anche su IE6 :)
Esposizione dei dati come servizi tramite librerie
REST
JAX-RS 竪 lo standard
RestEasy 竪 la migliore implementazione, ma ce ne sono
altre
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
16. REST
REST in a Nutshell
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
17. REST Architecture in una slide
Dissertazione PHD di Roy Fielding (coautore di
HTTP), 2000
REpresentational State Transfer
Ovvero, usare il Web cos狸 com竪 per far
collaborare le applicazioni: HTTP 竪 molto pi湛
ricco di quanto si creda!
Soprattutto in antitesi a WS-* (SOAP, WSDL,
UDDI, ecc.), anche se Roy Fielding present嘆 un
concetto pi湛 ampio
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
18. REST Architecture in una slide
HTTP a pieno potenziale
PUT, POST, GET, DELETE (lequivalente di un CRUD)
ma anche OPTIONS, CONNECT, TRACE, HEAD
URI come identi鍖cativo di una risorsa (Addressability)
Uniform interface (ogni risorsa deve essere acceduta
allo stesso modo)
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
19. REST verbs
Method URI RPC
GET http://my.com/users/ugol getUser(ugol)
POST http://my.com/users addUser()
DELETE http://my.com/users/luigif removeUser(luigif)
PUT http://my.com/users/ugol/39 updateUser(ugol,39)
GET http://my.com/users listUsers()
GET http://my.com/users/鍖nd/&q=boh 鍖ndUser(boh)
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
20. PUT vs POST
PUT
PUT
(existing POST
(new resource)
resource)
Crea un nuovo
/weblogs NA NO EFFECT
weblog
Modi鍖ca Crea nuova
Crea il blog
/weblogs/myblog settaggi di entry nel
myblog
myblog weblog
NA Posta un
/weblogs/myblog/
(chi ti da la Edit entry 18 commento alla
entries/18
URI?) entry 18
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
21. Safety & Idempotenza
Safety
4x1x1x1=4x1=4
Idempotenza
4x0=4x0x0x0
ma 4 x 0 4
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
22. Safety & Idempotenza
GET PUT DELETE POST
SAFE SI NO NO NO
IDEMPOTENTE SI SI SI NO
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
23. Safety & Idempotenza
Una applicazione che sia buon cittadino del Web
deve rispettare il protocollo HTTP e la semantica
dei suoi verbi
METHOD URI
GOOD DELETE http://my.com/user/ugol
BAD GET http://my.com/users/ugol/delete
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
24. Safety & Idempotenza, perch竪?
Google accelerator
client side caching tool, rilasciato nel 2005
prefetching dei link delle pagine visitate con un
browser
assumeva che le GET fossero safe
NON funzionava con moltissimi siti!
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
25. REST in Java
JAX-RS (JSR 311): The Java API for RESTful Web
services
E uno standard, Jersey 竪 la reference implementation
Facilissimo produrre XML o JSON
RESTEasy 竪 una delle implementazioni migliori
Ne parleremo diffusamente nel prossimo talk! Non
cambiate aula :)
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
26. JQuery
JQuery
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
27. JSON
JAvaScript Object Notation {
serializzazione di un "鍖rstName": "Luigi",
"lastName": "Fugaro",
oggetto javascript (ma anche "address": {
"streetAddress": "via G.Belli",
Java) "city": "Roma",
"postalCode": 00100
RFC 4627 },
Formato semplice per "phoneNumbers": [
"346 1234567",
scambiare oggetti: "330 8901234"
alternativa light ad XML ]
}
(meno verbosa)
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
28. JQuery
JQuery
JQuery 竪 divenuta negli ultimi anni la libreria dominante
nel panorama javascript
John Resig, lautore di Jquery, 竪 stato il pioniere
dellunobtrusive Javascript
oggi anche altre librerie vanno nella stessa direzione
竪 utilizzatissima per la semplicit con cui si ottengono ottimi
effetti gra鍖ci cross browser
permette di separare struttura e comportamento
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
29. Unobtrusive Javascript
Unobtrusive Javascript
I CSS permettono di separare la presentazione dalla
struttura
Una libreria js unobtrusive separa anche il
comportamento dalla struttura
Si attacca il comportamento alla struttura tramite dei selector
(CSS compatibili)
Il comportamento 竪 cross browser, ci pensa la libreria ad
applicare workaround
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
30. JQuery Simple Example
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
31. JTemplates
JTemplates 竪 una libreria di Templating client side
Sfrutta JQuery
Semplice e leggera (circa 12Kb)
Permette di scrivere cascading templates
Risolve il problema della componentizzazione delle
interfacce HTML/JS
http://jtemplates.tpython.com/
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
32. Esempio JTemplates
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
33. Esempio JTemplates
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
34. JQuery e 2.5 tier
Lidea di base dellarchitettura 2.5 tier 竪 quella di
utilizzare Javascript e JQuery per fare... tutto.
Tenendo ferma larchitettura REST, dunque solo servizi
Nessun codice lato server che non sia RESTEasy
ok le validazioni le abbiamo lasciate lato server :)
Tutto il resto 竪 sul client
Solo pagine statiche
Componenti JQuery + templating Javascript (JTemplate)
What else?
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
35. Reverse Ajax
Larchitettura 2.5 tier 竪 Comet-compliant
se si vuole un full MVC, con noti鍖che dirette verso le
View, si pu嘆 utilizzare una delle tecnologie Comet
Comet consiste nel tenere aperta una connessione verso il
server per ricevere gli eventi
Termine coniato nel 2006 da Alex Russell (Server push, HTTP
push, HTTP Streaming, Pushlets, Reverse Ajax)
diversi modi di realizzarlo, e diversi contro: attenzione ai
Firewall, alla Scalabilit, alla Server Af鍖nity.
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
36. Enterprise
2.5 tier &
Enterprise
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
37. Scalabilit
2.5 tier scala allin鍖nito
Le URI sono inerentemente scalabili. Il Web 竪
inerentemente scalabile. Dietro ad una URI pu嘆 esserci
un semplice Tomcat, ma anche un bilanciatore hardware.
E dietro SOAP?
Se la GUI 竪 solo sul client, i server possono essere
stateless. E anche se le pagine diventano decisamente pi湛
pesanti, possono sfruttare la cache del browser
Attenzione a Comet, per嘆.
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
38. Caching / Pipelining
Con 2.5 tier possiamo cachare 鍖no allinverosimile
cache delle query verso il DB
cache di HTTP
Cache-Control in HTTP 1.1
ci permette di NON trasferire verso il browser i risultati che
sappiamo non essere cambiati
cache del browser di tutta la GUI (html e js)
pipelining (effettuare il fetch di pi湛 risultati del necessario
e conservarli nel client)
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
39. Security
Con 2.5 tier la sicurezza 竪 sempli鍖cata
Due possibili approcci
usare un IDM (IDentity Manager)
essendo tutta lapplicazione basata su URI, il matrimonio con
un IDM non presenta grossi problemi
necessario plugin per lAS se si vuole colloquiare con lIDM per
migliorare la fruibilit e lestetica dellinterfaccia
utilizzare la sicurezza standard JEE, annotando
semplicemente i metodi esposti tramite REST
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
40. Server side agnostic!
Una GUI interamente JS e che consuma JSON 竪
indipendente dalla tecnologia server side!
Si possono scrivere componenti (datatable, calendari,
ecc.) e riciclarli allinterno di unazienda complessa con
architetture miste e non monotecnologiche
Java, .Net, Scala, Erlang, PHP, C, C++, etc.
Si pu嘆 dire che 2.5 tier faciliti il riuso allinterno di una
Enterprise pi湛 di ogni altra soluzione ad oggi conosciuta
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
41. 2.5 tier
Conclusioni
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
42. Conclusioni
Oggi 竪 possibile utilizzare unarchitettura full REST
in unazienda enterprise
Oggi 竪 possibile utilizzare un MVC completamente client
side, senza ricorrere ad aiutini
Le applicazioni saranno:
indipendenti dal client e dal server, riusabili (SOA), belle
gra鍖camente (ok, solo se avete un gra鍖co bravo),
performanti, e scalabili ai limiti estremi.
perci嘆 non 竪 solo possibile, ma anche consigliabile...
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010
43. 2.5 tiers, Rest In Peace
MVC Server Side,
REST In Peace
Ugo Landini, Jug Roma
Luigi Fugaro, Jug Roma
U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
Javaday IV Roma 30 gennaio 2010
sabato 30 gennaio 2010