Comments
Description
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