...

Applicazioni RESTful con Jersey

by user

on
Category: Documents
6

views

Report

Comments

Transcript

Applicazioni RESTful con Jersey
Applicazioni RESTful con Jersey
Come realizzare un microblog in 10 minuti
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
About us
Senior Consultant @
Milano
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
About us
Senior Consultant @
Lugano
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
JIP – Java Italian Portal
Sito Internet - http://www.javaportal.it/
•Il portale è stato realizzato e modellato in modo
da accompagnare quei programmatori che
vivono il proprio lavoro come passione e
creatività professionale.
•Tutte le attività di JavaPortal sono gratuite.
•La community è sempre lieta di accogliere
nuovi collaboratori che contribuiscano
all’arricchimento del sito,che abbiano nuove
idee e la voglia di curarle.
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
Sommario
•ReST: la teoria
•ReST e Java: JAX-RS (JSR 311)
•Le implementazioni di JAX-RS
•Jersey
•Demo!
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
ReST: la teoria – Cosa NON è ReST
•Non è (solo) una “buzzword”
•Non è un framework
•Non è un prodotto
•Non è la soluzione di tutti i problemi
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
ReST: la teoria – Cosa è ReST
Chiediamolo a Roy*…
Ciao Roy, cos’è questo
rest di cui tutti parlano?
Representational State
Transfer, uno stile
architetturale per un
sistema di ipermedia
distribuito”
* Roy T. Fielding Ph.D dissertation, “Architectural Styles and the Design of
Network-based Software Architectures”, (2000)
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
ReST: la teoria – Cosa è ReST
???
Ok, uno stile
architetturale è un
insieme di vincoli imposti
all’interazione fra
componenti, al fine di
ottenere alcune
proprietà desiderabili
quali scalabilità e
uniformità d’accesso
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
ReST: la teoria – Cosa è ReST
Ehm...
Sono sicuro che sai di cosa sto parlando.
Tempo fa ho scritto l’HTTP, lo conosci?
Sìsì!!
Ecco, bene. Dovevo fare
la tesi di dottorato, così
ho preso l’HTTP, ne ho
estratto i principi base e
con il marketing
abbiamo pensato ad un
nome “cool”.
REST è il risultato
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
Principi del REST: Intro
IDENTIFICAZIONE UNIVOCA DELLE RISORSE
• OGNI RISORSA HA UN ID UNIVOCO (AD ESEMPIO URI)
INTERFACCIA D’ACCESSO UNIFORME
• LE RISORSE SONO MANIPOLATE ATTRAVERSO LO STESSO INSIEME
COMUNICAZIONE STATELESS
DI METODI
DI RAPPRESENTAZIONI DELLE RISORSE
• DAI AL CLIENT CIÒ CHE TI CHIEDE!
IPERTESTO COME MOTORE DELLO STATO DELL’APPLICAZIONE (HATEOAS)
• INSERISCI LINK ALLE RISORSE CORRELATE NELLA RISPOSTA.
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
Principi del REST: 1 di 4
IDENTIFICAZIONE
UNIVOCA DELLE RISORSE
• OGNI RISORSA HA UN ID UNIVOCO (AD ESEMPIO URI)
UNA URL, UNA RISORSA!
http://roma.javaday.it/squadra/blu
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
Principi del REST: 1 di 4
IDENTIFICAZIONE
UNIVOCA DELLE RISORSE
• OGNI RISORSA HA UN ID UNIVOCO (AD ESEMPIO URI)
UNA URL, UNA RISORSA!
http://roma.javaday.it/giocatore/java
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
Principi del REST: 2 di 4
INTERFACCIA D’ACCESSO
• LE RISORSE
UNIFORME
SONO MANIPOLATE ATTRAVERSO LO STESSO INSIEME DI METODI
CRUD
Create (crea giocatore)
Read (recupera giocatore o squadra)
Update (aggiorna giocatore)
Delete (elimina squadra)
DELETE http://roma.javaday.it/squadra/blu
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
Principi del REST: 3 di 4
COMUNICAZIONE
STATELESS DI RAPPRESENTAZIONI DELLE RISORSE
• DAI AL CLIENT CIÒ CHE TI CHIEDE!
non mantengono lo stato…
Ma… chi sei?
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
Principi del REST: 3 di 4
COMUNICAZIONE
STATELESS DI RAPPRESENTAZIONI DELLE RISORSE
• DAI AL CLIENT CIÒ CHE TI CHIEDE!
…ma eseguono una richiesta
GET Nemo location
P. Sherman, 42
Wallaby Way, Sydney
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
Principi del REST: 3 di 4
COMUNICAZIONE
STATELESS DI RAPPRESENTAZIONI DELLE RISORSE
• DAI AL CLIENT CIÒ CHE TI CHIEDE!
JSON
{"giocatore": {
"numero": "10java",
"caratteristiche": {
"caratteristica": [
{"type": "capelli", "value": "blu"},
{"type": "baffi", "value": "no"},
{"type": "altezza", "value": "185"}
]
}
}}
XML
<giocatore numero="7java">
<caratteristiche>
<caratteristica type="capelli" value="blu" />
<caratteristica type="baffi" value="no" />
<caratteristica type="altezza" value="185" />
</caratteristiche>
</giocatore>
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
Principi del REST: 3 di 4
COMUNICAZIONE
STATELESS DI RAPPRESENTAZIONI DELLE RISORSE
• DAI AL CLIENT CIÒ CHE TI CHIEDE!
JSON
XML
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
Principi del REST: 4 di 4
IPERTESTO
COME MOTORE DELLO STATO DELL’APPLICAZIONE
• INSERISCI
(HATEOAS)
LINK ALLE RISORSE CORRELATE NELLA RISPOSTA.
<giocatore numero="7java">
<link href=" http://roma.javaday.it/squadra/blu" rel=“squadra"/>
<link href=" http://roma.javaday.it/giocatore/7java" rel=“self"/>
<caratteristiche>
<caratteristica type="capelli" value="blu" />
<caratteristica type="baffi" value="no" />
<caratteristica type="altezza" value="185" />
</caratteristiche>
</giocatore>
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
HTTP è RESTful?
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
HTTP è RESTful
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
HTTP è RESTful – Principi REST/HTTP
IDENTIFICAZIONE UNIVOCA DELLE RISORSE
• URI
INTERFACCIA D’ACCESSO UNIFORME
• GET,PUT,POST,DELETE (e altro ancora…)
COMUNICAZIONE STATELESS
DI RAPPRESENTAZIONI DELLE RISORSE
• Stateless e Content Negotiation (accept/content type)
IPERTESTO COME MOTORE DELLO STATO DELL’APPLICAZIONE (HATEOAS)
• Header LINK, redirect, moved…
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
Essere RESTful
SVANTAGGI
VANTAGGI
(PER CHI VIENE
DA RPC)
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
JAX-RS (JSR 311)
REST
JAVA
API JAVA PER LO SVILUPPO DI WEB SERVICES RESTFUL
VERSIONE ATTUALE 1.1
JCP
JEE
INCLUSA NELLA PIATTAFORMA JEE6
POJO (PLAIN OLD JAVA OBJECT) + ANNOTATION = RISORSA
SERVER-SIDE ONLY (CLIENT PREVISTO VERSION 2.0)
JAX-RS
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
Risorsa d’esempio
@Path(“/blogs/”)
Identifica il frammento di URI alla quale la
risorsa risponderà
http://localhost:8080/resources/blogs/...
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
Risorsa d’esempio
@Context
Dependency Injection
Principio di Hollywood – Non chiamarmi,
ti chiamerò io ☺
Configurazione dinamica dell’URI Info
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
Risorsa d’esempio
@GET - @POST
Annotazioni sui metodi della classe che
risponderanno alle corrispondenti
chiamate HTTP
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
Risorsa d’esempio
@Produces({“application/json”, “…”})
Indica il tipo di rappresentazione che il
server dichiara di essere in grado di
produrre per quella risorsa
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
Risorsa d’esempio
@Consumes({“application/xml”, “…”})
Indica il tipo di rappresentazione che il
server dichiara di essere in grado di
interpretare
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
Risorsa d’esempio
@QueryParam
@PathParam
@FormParam
…
Utility per l’estrazione dei parametri
dall’URL
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
Cosa avviene in pratica 1 di 2
Request HTTP
GET http://roma.javaday.it/resources/blogs
Response
200 OK
Content-Type: text/xml
<xml>…</xml>
new
Object()
Application
Resource 1
D.I.
Resource 2
Esecuzione
Resource N
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
Cosa avviene in pratica 2 di 2
DALLE RICHIESTE HTTP IN
OGGETTI JAVA
1.
2.
• MessageBodyReader
DAGLI OGGETTI JAVA IN
RISPOSTE HTTP
• MessageBodyWriter
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
Alcune Implementazioni (ad oggi)
Reference Implementation JEE6
https://jersey.dev.java.net/
Configurazione XML Avanzata
http://cxf.apache.org/
API Client Avanzata
http://www.jboss.org/resteasy
Restlet edition for GWT and Android
http://www.restlet.org
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
Il nostro Microblog
Creiamo un’applicazione web-based che
permetta di editare semplici contenuti
testuali (tweet) con la possibilità di
organizzarli in sezioni…. Un microblog
collaborativo
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
Microblog - Layers
Presentation
• HTML
• JQuery
REST
• Jersey
Data
DBMS
• JPA
• EclipseLink
• MySQL
Helper & Converter
Glassfish v3
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
Microblog - ER
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
Microblog – Class Diagram
<< JAXB entity >>
MicroblogConverter
<< Jersey Resource >>
<<create>>
MicroblogResource
<< wrap >>
<<uses>>
<< entity >>
Microblog
UriResolver
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
Proxy Javascript
Server
Client
MicroblogResource
Microblog.js
Http
Microblog
MicroblogConverter
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
Microblog - Funzionalità
Microblog
Tweet
Creare (POST)
Creare (POST)
http://localhost:8080/microblog/resources/blogs/
http://localhost:8080/microblog/resources/tweets/
Lista (GET)
Lista (GET)
http://localhost:8080/microblog/resources/blogs/
http://localhost:8080/microblog/resources/tweets/
Edita (PUT)
http://localhost:8080/microblog/resources/tweets/{id}
Cancellazione (DELETE)
Cancellazione (DELETE)
http://localhost:8080/microblog/resources/blogs/{id}
http://localhost:8080/microblog/resources/tweets/{id}
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
Cosa realizzeremo
POST
GET
DELETE
POST
PUT
GET
DELETE
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
DEMO
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
Riferimenti
RICCARDO SOLIMENA
E-M@IL
[email protected]
WEB
riccardosolimena.blogspot.com
FREE TIME www.youtube.com/riccardosolimena
TWITTER
riccardosolimen
STEFANO DELLAFIORE
E-M@IL
[email protected]
WEB
losfidantefaleroe.blogspot.com
FREE TIME birradiscimmia.blogspot.com
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
Per approfondire
•http://it.wikipedia.org/wiki/Representational_State_Transfer
•http://it.wikipedia.org/wiki/HTTP
•http://wiki.answers.com/Q/What_is_HTML_stateless_protocol
•http://roy.gbiv.com/
•https://jersey.dev.java.net/
•http://java.sun.com/javaee/technologies/persistence.jsp
•http://en.wikipedia.org/wiki/JAX-RS
•https://glassfish.dev.java.net/
•http://en.wikipedia.org/wiki/Create,_read,_update_and_delete
•http://www.json.org/
•http://it.wikipedia.org/wiki/Object-relational_mapping
•http://it.wikipedia.org/wiki/RPC
•http://java.sun.com/javaee/technologies/
•http://en.wikipedia.org/wiki/Plain_Old_Java_Object
•http://sbtourist.blogspot.com/2009/01/jax-rs-and-hateoas.html
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
Q&A
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
Ringraziamenti
Riccardo Solimena e Stefano Dellafiore
Javaday IV – Roma – 30 gennaio 2010
Fly UP