SlideShare une entreprise Scribd logo
1  sur  42
Lezione 11: Accesso ai
    RESTful Web Services in
              Java
        Corso di Programmazione in Rete
       Laurea Magistrale in Ing. Informatica
         Università degli Studi di Salerno



1
Outline


    ✦ Struttura di un WS RESTful

    ✦ Realizzazione di client in Java: le classi
      URL e HttpURLConnection

    ✦ La codifica x-www-form-urlencoded



2
Struttura di un WS RESTful


    ✦ Elementi fondamentali di un Web Service
      basato sull’architettura REST:
     •   Risorse
     •   Rappresentazioni delle risorse
     •   Operazioni sulle risorse




3
Risorse

    ✦ Un servizio RESTful gestisce un insieme
      di risorse
     •   Esempio: in un sistema di commercio elettronico
         le risorse possono essere i prodotti e gli ordini
    ✦ Una risorsa può rappresentare una
      “collezione” di altre risorse
     •   Esempio: una risorsa può rappresentare l’insieme
         degli ordini effettuati da un determinato utente



4
Risorse
    ✦ Ogni risorsa è identificata attraverso un
      URL specifico
     •   è semplice trasferire l’indirizzo di una risorsa ad
         un altra applicazione, creare dei collegamenti tra
         risorse, mantenere dei “bookmark” ecc.
    ✦ Esempio:
     •   http://mycommerce.com/products
         ‣   Insieme dei prodotti

     •   http://mycommerce.com/products/14287
         ‣   Singolo prodotto


5
Rappresentazioni
    ✦ Le risorse sono entità astratte
      caratterizzate da uno stato che può
      cambiare nel tempo
     •   ad esempio, un prodotto ha un nome, una
         descrizione, un prezzo, una disponibilità ecc.
    ✦ Il client e il server comunicano
      scambiandosi rappresentazioni dello stato
      delle risorse (ecco perché si parla di
      REpresentational State Transfer)
    ✦ Il formato della rappresentazione deve
      essere concordato tra il client e il server
6
Rappresentazioni
    ✦ Ciascuna risorsa può avere più
      rappresentazioni diverse
     •   Ad esempio, le risorse del nostro sito di
         commercio elettronico possono essere
         rappresentate:
         ‣   in formato HTML per la visualizzazione ad un utente che
             accede mediante un browser web
         ‣   in formato PDF per la stampa
         ‣   in formato XML per consentire l’elaborazione da parte di
             un’altra applicazione
         ‣   in formato JSON per consentire l’elaborazione da parte di
             un JavaScript presente in una pagina web


7
Rappresentazioni

    ✦ Nel protocollo HTTP, il formato di una
      risorsa viene identificato attraverso la
      codifica definita nello standard MIME
      (Multimedia Internet Mail Extension)
    ✦ Un “MIME type” è specificato da una
      stringa che ha come formato:
     •   type/subtype
     •   type/subtype; options



8
Rappresentazioni
    ✦ I nomi dei tipi MIME sono assegnati
      dall’IANA (Internet Assigned Number
      Authority)
    ✦ Esempi:
     •   text/plain          formato testo semplice
     •   text/plain; charset=UTF-8   testo semplice
     •   text/html           formato HTML
     •   application/xml    formato XML
     •   image/jpeg          formato JPEG


9
Operazioni

     ✦ Nell’approccio REST si usa un numero
       limitato di operazioni per leggere o
       modificare lo stato delle risorse
     ✦ Le operazioni corrispondono ai “metodi”
       definiti nel protocollo HTTP
     ✦ Non tutte le operazioni sono disponibili su
       tutte le risorse



10
Operazioni: GET

     ✦ L’operazione GET consente di ottenere
       una rappresentazione della risorsa
     ✦ È l’operazione di default per i browser
       web
     ✦ Non deve modificare lo stato delle risorse
      •   il risultato dell’operazione può essere
          temporaneamente mantenuto in una cache per
          migliorare le prestazioni



11
Operazioni: GET

     ✦ Nota: alcune web applications usano GET
       anche per modificare lo stato delle risorse
      •   vantaggio: l’operazione GET è semplice da testare
          usando un browser web
      •   svantaggio: problemi con cache, proxy e altri
          componenti dell’infrastruttura del web
      •   l’uso di GET per operazioni che modificano lo stato
          è considerato una violazione della filosofia REST




12
Operazioni: PUT
     ✦ L’operazione PUT modifica lo stato di una
       risorsa, o crea la risorsa se l’URL
       specificato non ha una risorsa
       corrispondente
     ✦ I browser web normalmente non usano
       PUT, ma le “cartelle web” disponibili nei
       principali sistemi operativi consentono di
       usare questa operazione per scrivere su
       un server (se il server lo permette)

13
Operazioni: DELETE

     ✦ L’operazione DELETE cancella una risorsa
       dal server
     ✦ Anche questa operazione non è
       normalmente usata da un browser, ma
       supportata da altri client come le “cartelle
       web”



14
Operazioni: POST
     ✦ L’operazione POST è usata per l’aggiunta
       di nuove risorse a una collezione
     ✦ È usata dai browser web per l’invio dei
       form
     ✦ A differenza di GET, PUT e DELETE,
       l’operazione POST non è idempotente:
       eseguire due volte la stessa operazione
       produce uno stato diverso da una singola
       esecuzione

15
Operazioni: POST

     ✦ Per la creazione di nuove risorse si può
       usare sia PUT che POST
      •   PUT richiede di specificare l’URL della risorsa da
          creare; va usata quando si desidera che sia il
          client a decidere l’URL delle nuove risorse
      •   POST richiede di specificare l’URL della collezione
          che conterrà la risorsa da creare; va usata
          quando si desidera che sia il server a decidere
          l’URL delle nuove risorse



16
Operazioni: POST
     ✦ Diverse applicazioni usano solo i metodi
       GET e POST; tutte le operazioni che
       modificano lo stato sono codificate
       usando POST con opportuni parametri
      •   vantaggio: è possibile testare le operazioni
          usando un form HTML
      •   questa soluzione è considerata una parziale
          violazione della filosofia REST
     ✦ XML-RPC e SOAP codificano le richieste di
       esecuzione di un metodo in un’operazione
       POST
17
Esecuzione di un’operazione

     ✦ Il protocollo HTTP ha una struttura
       richiesta/risposta, in cui ogni interazione
       viene considerata indipendente dalle altre
       (il protocollo è stateless)
      •   il client invia la richiesta
      •   il server elabora la richiesta
      •   il server invia la risposta, contenente
          eventualmente un’indicazione di errore



18
Esecuzione di un’operazione

     ✦ Una richiesta HTTP contiene:
      •   l’URL della risorsa a cui è riferita
      •   l’operazione da effettuare (es. GET)
      •   informazioni aggiuntive (headers), ad esempio
          per indicare il tipo di rappresentazione richiesta
      •   per alcune operazioni, un “corpo” della richiesta
          (body); in particolare il body è presente nelle
          operazioni PUT e POST




19
Esecuzione di un’operazione

     ✦ Una risposta HTTP contiene:
      •   un codice numerico che indica l’esito
          dell’operazione (status)
      •   informazioni aggiuntive (headers); ad esempio, il
          tipo di rappresentazione restituito
      •   per alcune operazioni, un “corpo” della risposta
          (body)




20
Status

     ✦ Lo status è codificato su 3 cifre
     ✦ La prima cifra indica l’esito generale:
      •   2xx: operazione eseguita con successo
      •   3xx: redirezione (la risorsa desiderata si trova a
          un altro indirizzo)
      •   4xx: errore da parte del client
      •   5xx: errore interno al server




21
Status
     ✦ Le due cifre successive forniscono
       maggiori dettagli. Ad esempio:
        ‣ 200: OK
        ‣ 201: OK, creata nuova risorsa con URL specificato negli
             header
         ‣   204:     OK senza response body
         ‣   301:     Redirezione permanente
         ‣   307:     Redirezione temporanea
         ‣   401:     Utente non autorizzato a eseguire l’operazione
         ‣   404:     Risorsa non trovata
         ‣   501:     Metodo non implementato
         ‣   505:     Versione del protocollo non supportata


22
Definizione di un WS
     ✦ Nella definizione del web service, occorre
       specificare:
      •   quali operazioni sono permesse per ciascun URL
      •   quali formati sono accettati per il body della
          richiesta e della risposta
      •   i codici di stato restituiti
     ✦ La definizione è solitamente informale,
       ma sono stati proposti linguaggi per la
       descrizione di un WS RESTful:
      •   WSDL 2.0

23
      •   WADL
Client in Java
     ✦ Un client RESTful deve:
      •   individuare la risorsa di cui vuole consultare o
          modificare lo stato
      •   preparare una richiesta indicando l’operazione da
          effettuare e le altre informazioni aggiuntive
      •   inviare la richiesta e ottenere la risposta
      •   esaminare lo status della risposta ed estrarre le
          informazioni di interesse dal body e dagli header
     ✦ Le classi necessarie sono: URL e
       HttpURLConnection, definite in java.net

24
La classe URL

     ✦ Consente di costruire un URL,
       eventualmente a partire da un URL
       relativo
     ✦ Consente di creare una connessione alla
       risorsa identificata dall’URL (istanziando
       la classe HttpURLConnection)



25
La classe URL
         ✦ Costruttori:
             •   URL(String url) throws MalformedURLException
             •   URL(URL base, String relativePart) throws
                 MalformedURLException
                 ‣   il secondo costruttore produce un URL relativo a partire
                     dall’URL base

         ✦ Esempio:
     	   public static void main(String args[]) throws Exception {
     	   	 URL base=new URL("http://nerone.diiie.unisa.it/plone/adinf/");
     	   	 URL corso=new URL(base, "Corsi_new/Informatica Magistrale/Programmazione in Rete");
     	   	 System.out.println(corso);
            }




26
HttpURLConnection
     ✦ Per connettersi alla risorsa occorre usare
       un oggetto della classe
       HttpURLConnection
     ✦ Tale oggetto viene costruito dal metodo
       openConnection() di URL:
      •   URLConnection openConnection() throws
          IOException;
          ‣   NOTA: poiché il valore di ritorno è un URLConnection,
              occorre un cast per ottenere un HttpURLConnection




27
HttpURLConnection
     ✦ Una volta ottenuto l’oggetto che
       rappresenta la connessione, occorre:
      •   impostare il metodo e, se necessario, gli header
          della richiesta
      •   chiamare il metodo connect() per attivare la
          connessione
      •   inviare (se necessario) il request body
      •   leggere lo status code e, se necessario, gli header
          della risposta
      •   leggere il body della risposta


28
Preparazione

     ✦ Per impostare il metodo HTTP da usare,
       occorre richiamare:
      •   void setRequestMethod(String method) throws
          IOException;
          ‣   Nota: il nome dei metodi HTTP è case sensitive; occorre
              usare “GET” e non “get”.
          ‣   Nota: per default la classe usa il metodo GET




29
Preparazione
     ✦ È possibile specificare gli header della
       richiesta con il metodo:
      •   void setRequestProperty(String name, String
          value)
     ✦ Tra gli header della richiesta più
       importanti:
      •   “Content-Type”: tipo MIME del request body
      •   “Accept”: lista (separata da virgole) dei tipi MIME
          accettati per il response body


30
Preparazione
             ✦ Esempio

     	   	   HttpURLConnection conn=(HttpURLConnection)url.openConnection();
     	   	   conn.setRequestMethod("POST");
     	   	   conn.setRequestProperty("Content-Type", "text/plain; charset=UTF-8");
     	   	   conn.setRequestProperty("Accept", "text/plain, text/html");
     	   	   // continua...




31
Preparazione
     ✦ In fase di preparazione occorre
       specificare se sarà presente un request
       body e/o un response body con i metodi:
       •   void setDoOutput(boolean on);
           ‣   se il parametro true, ci sarà un request body

       •   void setDoInput(boolean on);
        ‣ se il parametro è true, ci sarà un response body
     ✦ Per default la connessione assume che ci
       sia un response body ma non un request
       body

32
Connessione
     ✦ Dopo la preparazione, l’accesso alla
       risorsa viene iniziato usando il metodo:
      •   void connect() throws IOException
     ✦ Una volta avviata la connessione è
       possibile inviare il request body (se
       necessario) e quindi leggere la risposta
     ✦ L’oggetto HttpURLConnection richiama
       automaticamente connect quando viene
       usato uno dei metodi che richiedono la
       connessione

33
Invio del request body
     ✦ È possibile inviare il request body al
       server attraverso un output stream
       ottenuto dal metodo:
      •   OutputStream getOutputStream() throws
          IOException
     ✦ NOTA: i dati sono bufferizzati in memoria,
       e inviati solo al momento in cui è
       eseguito il metodo close dell’output
       stream


34
Uso della risposta
     ✦ Per leggere lo status della risposta:
      •   int getResponseCode() throws IOException
     ✦ Per leggere il body della risposta:
      •   String getContentType(); // tipo MIME della
          risposta
      •   InputStream getInputStream() throws
          IOException; // stream attraverso cui leggere il
          dato
          ‣   NOTA: occorre usare il metodo close() dello stream per
              assicurarsi che vengano rilasciate le risorse (es. socket
              TCP) usate dalla connessione


35
Esempio
         ✦ Esempio di una operazione GET
     import java.net.*;
     import java.io.*;
     public class EsempioGet {
     	 public static void main(String args[]) throws Exception {
     	 	 URL url=new URL("http://en.wikipedia.org/wiki/Representational_State_Transfer");
     	 	 HttpURLConnection conn=(HttpURLConnection)url.openConnection();
     	 	 int status=conn.getResponseCode();
     	 	 System.out.println("RESPONSE CODE: "+status);
     	 	 System.out.println("CONTENT TYPE: "+conn.getContentType());
     	 	 if (status>=200 && status<=299) {
     	 	 	 InputStreamReader in=new InputStreamReader(conn.getInputStream(), "UTF-8");
     	 	 	 int c;
     	 	 	 while ((c=in.read())!=-1)
     	 	 	 	 System.out.print((char)c);
     	 	 }
     	 }
     }




36
URL encoding

     ✦ Per passare i contenuti di un form al
       server web è stato definito il tipo
       application/x-www-form-urlencoded
      •   usato normalmente per il request body
          dell’operazione POST nell’invio di form
      •   può essere usato per passare informazioni
          aggiuntive anche alle altre operazioni (es. GET)
          inserendo i dati nella URL dopo un ‘?’ (query
          string)



37
URL encoding
     ✦ Un contenuto di questo tipo è costituito
       da un insieme di coppie (chiave, valore)
       codificate in una stringa, usando ‘&’ per
       separare le coppie e ‘=’ per separare
       chiavi e valori:
      •   chiave1=valore1&chiave2=valore2&...
     ✦ Le chiavi e i valori devono essere
       codificati usando una codifica detta URL
       encoding per proteggere i caratteri
       speciali (es. / o &) che hanno un
       significato in una URL
38
URL encoding
     ✦ Le classi URLEncoder e URLDecoder
       forniscono metodi per codificare/
       decodificare l’URL encoding
     ✦ In particolare, per la codifica si usa il
       metodo statico di URLEncoder:
      •   static String encode(String value, String charset);
     ✦ Nota:
      •   lo standard dice che il charset da usare per la
          query string è UTF-8 mentre per il request body
          va specificato nel tipo MIME; in pratica molti
          server scelgono un charset fisso
          indipendentemente dalla richiesta
39
Esempio
         ✦ Un esempio completo di POST
     import java.net.*;
     import java.io.*;
     import java.util.*;
     public class EsempioPost {
     	 public static String encodeForm(Map<String,String> data) {
     	 	 StringBuffer sb=new StringBuffer();
     	 	 try {
     	 	 	 for(String key : data.keySet()) {
     	 	 	 	 sb.append(URLEncoder.encode(key, "UTF-8"));
     	 	 	 	 sb.append('=');
     	 	 	 	 sb.append(URLEncoder.encode(data.get(key), "UTF-8"));
     	 	 	 	 sb.append('&');
     	 	 	 }
     	 	 } catch (UnsupportedEncodingException e) {
     	 	 	 throw new RuntimeException("Unsupported encoding UTF-8");
     	 	 }
     	 	 return sb.toString();
     	 }
     // continua



40
Esempio
           ✦ Un esempio completo di POST (continua)
     	    public static void main(String args[]) throws Exception {
     	    	 URL url=new URL("http://www.myservice.com/orders");
     	    	 Map<String,String> form=new HashMap<String,String>();
     	    	 form.put("user", "pippo");
     	    	 form.put("product", "xyz123");
     	    	 form.put("quantity", "5");

     	    	 String body=encodeForm(form);
     	    	 HttpURLConnection conn=(HttpURLConnection)url.openConnection();
     	    	 conn.setRequestMethod("POST");
     	    	 conn.setRequestProperty("Content-Type",
     	    	 	 	 "application/x-www-form-urlencoded; charset=UTF-8");
     	    	 conn.setDoOutput(true);
     	    	 PrintWriter pw=new PrintWriter(
     	    	 	 	 new OutputStreamWriter(
     	    	 	 	 	 	 conn.getOutputStream(), "UTF-8"));
     //   continua




41
Esempio
             ✦ Un esempio completo di POST (continua)

     	   	    pw.print(body);
     	   	    pw.close();
     	   	    int status=conn.getResponseCode();
     	   	    System.out.println("RESPONSE CODE: "+status);
     	   	    System.out.println("CONTENT TYPE: "+conn.getContentType());
     	   	    if (status>=200 && status<=299) {
     	   	    	 InputStreamReader in=new InputStreamReader(conn.getInputStream(), "UTF-8");
     	   	    	 int c;
     	   	    	 while ((c=in.read())!=-1)
     	   	    	 	 System.out.print((char)c);
     	   	    	 in.close();
     	   	    }
     	   }
     }




42

Contenu connexe

Tendances

gRPC, GraphQL, REST - Which API Tech to use - API Conference Berlin oct 20
gRPC, GraphQL, REST - Which API Tech to use - API Conference Berlin oct 20gRPC, GraphQL, REST - Which API Tech to use - API Conference Berlin oct 20
gRPC, GraphQL, REST - Which API Tech to use - API Conference Berlin oct 20Phil Wilkins
 
Angular interview questions
Angular interview questionsAngular interview questions
Angular interview questionsGoa App
 
ORM, JPA, & Hibernate Overview
ORM, JPA, & Hibernate OverviewORM, JPA, & Hibernate Overview
ORM, JPA, & Hibernate OverviewBrett Meyer
 
REST API and CRUD
REST API and CRUDREST API and CRUD
REST API and CRUDPrem Sanil
 
[수정본] 우아한 객체지향
[수정본] 우아한 객체지향[수정본] 우아한 객체지향
[수정본] 우아한 객체지향Young-Ho Cho
 
SOLID Maitrisez votre programmation Objet​
SOLID Maitrisez votre programmation Objet​SOLID Maitrisez votre programmation Objet​
SOLID Maitrisez votre programmation Objet​Vincent Petetin
 
Presentation of framework Angular
Presentation of framework AngularPresentation of framework Angular
Presentation of framework AngularLhouceine OUHAMZA
 
Reactive Card Magic: Understanding Spring WebFlux and Project Reactor
Reactive Card Magic: Understanding Spring WebFlux and Project ReactorReactive Card Magic: Understanding Spring WebFlux and Project Reactor
Reactive Card Magic: Understanding Spring WebFlux and Project ReactorVMware Tanzu
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring FrameworkDineesha Suraweera
 
Introduction to Spring Boot!
Introduction to Spring Boot!Introduction to Spring Boot!
Introduction to Spring Boot!Jakub Kubrynski
 
How to Build a High Performance Application with PHP and Swoole?
How to Build a High Performance Application with PHP and Swoole?How to Build a High Performance Application with PHP and Swoole?
How to Build a High Performance Application with PHP and Swoole?Albert Chen
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring bootAntoine Rey
 
Appalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPAppalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPYouness Boukouchi
 

Tendances (20)

gRPC, GraphQL, REST - Which API Tech to use - API Conference Berlin oct 20
gRPC, GraphQL, REST - Which API Tech to use - API Conference Berlin oct 20gRPC, GraphQL, REST - Which API Tech to use - API Conference Berlin oct 20
gRPC, GraphQL, REST - Which API Tech to use - API Conference Berlin oct 20
 
Spring Security 5
Spring Security 5Spring Security 5
Spring Security 5
 
Angular interview questions
Angular interview questionsAngular interview questions
Angular interview questions
 
ORM, JPA, & Hibernate Overview
ORM, JPA, & Hibernate OverviewORM, JPA, & Hibernate Overview
ORM, JPA, & Hibernate Overview
 
REST API and CRUD
REST API and CRUDREST API and CRUD
REST API and CRUD
 
Hibernate jpa
Hibernate jpaHibernate jpa
Hibernate jpa
 
[수정본] 우아한 객체지향
[수정본] 우아한 객체지향[수정본] 우아한 객체지향
[수정본] 우아한 객체지향
 
SOLID Maitrisez votre programmation Objet​
SOLID Maitrisez votre programmation Objet​SOLID Maitrisez votre programmation Objet​
SOLID Maitrisez votre programmation Objet​
 
Presentation of framework Angular
Presentation of framework AngularPresentation of framework Angular
Presentation of framework Angular
 
Reactive Card Magic: Understanding Spring WebFlux and Project Reactor
Reactive Card Magic: Understanding Spring WebFlux and Project ReactorReactive Card Magic: Understanding Spring WebFlux and Project Reactor
Reactive Card Magic: Understanding Spring WebFlux and Project Reactor
 
Spring data jpa
Spring data jpaSpring data jpa
Spring data jpa
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring Framework
 
Introduction to Spring Boot!
Introduction to Spring Boot!Introduction to Spring Boot!
Introduction to Spring Boot!
 
An Introduction To REST API
An Introduction To REST APIAn Introduction To REST API
An Introduction To REST API
 
How to Build a High Performance Application with PHP and Swoole?
How to Build a High Performance Application with PHP and Swoole?How to Build a High Performance Application with PHP and Swoole?
How to Build a High Performance Application with PHP and Swoole?
 
Les Servlets et JSP
Les Servlets et JSPLes Servlets et JSP
Les Servlets et JSP
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring boot
 
Présentation Angular 2
Présentation Angular 2 Présentation Angular 2
Présentation Angular 2
 
Nouveautés de java 8
Nouveautés de java 8Nouveautés de java 8
Nouveautés de java 8
 
Appalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPAppalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSP
 

Similaire à Lezione 11: Accesso ai RESTful Web Services in Java

Creare API pubbliche, come evitare gli errori comuni
 Creare API pubbliche, come evitare gli errori comuni Creare API pubbliche, come evitare gli errori comuni
Creare API pubbliche, come evitare gli errori comuniAndrea Dottor
 
Working with http client rest apis and connection availability check
Working with http client rest apis and connection availability checkWorking with http client rest apis and connection availability check
Working with http client rest apis and connection availability checkMichele Aponte
 
Laboratorio Di Basi Di Dati 05 Architettura Del Web
Laboratorio Di  Basi Di  Dati 05  Architettura Del  WebLaboratorio Di  Basi Di  Dati 05  Architettura Del  Web
Laboratorio Di Basi Di Dati 05 Architettura Del Webguestbe916c
 
Lezione 10: Web Service in Java (2)
Lezione 10: Web Service in Java (2)Lezione 10: Web Service in Java (2)
Lezione 10: Web Service in Java (2)Andrea Della Corte
 
REST API fantastiche e dove trovarle
REST API fantastiche e dove trovarleREST API fantastiche e dove trovarle
REST API fantastiche e dove trovarleMarco Breveglieri
 
Le Applicazioni di Internet Web, FTP, Posta e App pr il Mobile
Le Applicazioni di Internet Web, FTP, Posta e App pr il MobileLe Applicazioni di Internet Web, FTP, Posta e App pr il Mobile
Le Applicazioni di Internet Web, FTP, Posta e App pr il MobileI.S.I.S. "Antonio Serra" - Napoli
 
WeWantWeb - WCF Data Services
WeWantWeb - WCF Data ServicesWeWantWeb - WCF Data Services
WeWantWeb - WCF Data ServicesDomusDotNet
 
Come funziona la navigazione Web
Come funziona la navigazione WebCome funziona la navigazione Web
Come funziona la navigazione Webextrategy
 
Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Whymca
 
SVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROIDSVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROIDLuca Masini
 
WebSphere Portal & User Experience
WebSphere Portal & User ExperienceWebSphere Portal & User Experience
WebSphere Portal & User ExperienceAndrea Fontana
 
Silverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteriaSilverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteriaMauro Servienti
 
Architetture web - Linguaggi e standard - Web server, application server, dat...
Architetture web - Linguaggi e standard - Web server, application server, dat...Architetture web - Linguaggi e standard - Web server, application server, dat...
Architetture web - Linguaggi e standard - Web server, application server, dat...Fulvio Corno
 

Similaire à Lezione 11: Accesso ai RESTful Web Services in Java (20)

Net core base
Net core baseNet core base
Net core base
 
Creare API pubbliche, come evitare gli errori comuni
 Creare API pubbliche, come evitare gli errori comuni Creare API pubbliche, come evitare gli errori comuni
Creare API pubbliche, come evitare gli errori comuni
 
Working with http client rest apis and connection availability check
Working with http client rest apis and connection availability checkWorking with http client rest apis and connection availability check
Working with http client rest apis and connection availability check
 
Laboratorio Di Basi Di Dati 05 Architettura Del Web
Laboratorio Di  Basi Di  Dati 05  Architettura Del  WebLaboratorio Di  Basi Di  Dati 05  Architettura Del  Web
Laboratorio Di Basi Di Dati 05 Architettura Del Web
 
Lezione 10: Web Service in Java (2)
Lezione 10: Web Service in Java (2)Lezione 10: Web Service in Java (2)
Lezione 10: Web Service in Java (2)
 
REST API fantastiche e dove trovarle
REST API fantastiche e dove trovarleREST API fantastiche e dove trovarle
REST API fantastiche e dove trovarle
 
Le Applicazioni di Internet Web, FTP, Posta e App pr il Mobile
Le Applicazioni di Internet Web, FTP, Posta e App pr il MobileLe Applicazioni di Internet Web, FTP, Posta e App pr il Mobile
Le Applicazioni di Internet Web, FTP, Posta e App pr il Mobile
 
Apache Parte 2
Apache Parte 2Apache Parte 2
Apache Parte 2
 
WeWantWeb - WCF Data Services
WeWantWeb - WCF Data ServicesWeWantWeb - WCF Data Services
WeWantWeb - WCF Data Services
 
Web api 2.0
Web api 2.0Web api 2.0
Web api 2.0
 
ASP.NET Web API
ASP.NET Web APIASP.NET Web API
ASP.NET Web API
 
Come funziona la navigazione Web
Come funziona la navigazione WebCome funziona la navigazione Web
Come funziona la navigazione Web
 
Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini
 
SVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROIDSVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROID
 
WebSphere Portal & User Experience
WebSphere Portal & User ExperienceWebSphere Portal & User Experience
WebSphere Portal & User Experience
 
IBM WCM e SEO
IBM WCM e SEOIBM WCM e SEO
IBM WCM e SEO
 
WebSphere Portal e WCM #dd12
WebSphere Portal e WCM #dd12WebSphere Portal e WCM #dd12
WebSphere Portal e WCM #dd12
 
Swagger pertutti
Swagger pertuttiSwagger pertutti
Swagger pertutti
 
Silverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteriaSilverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteria
 
Architetture web - Linguaggi e standard - Web server, application server, dat...
Architetture web - Linguaggi e standard - Web server, application server, dat...Architetture web - Linguaggi e standard - Web server, application server, dat...
Architetture web - Linguaggi e standard - Web server, application server, dat...
 

Plus de Andrea Della Corte

Lezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern ComportamentaliLezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern ComportamentaliAndrea Della Corte
 
Lezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern ComportamentaliLezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern ComportamentaliAndrea Della Corte
 
Lezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern ComportamentaliLezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern ComportamentaliAndrea Della Corte
 
Lezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern StrutturaliLezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern StrutturaliAndrea Della Corte
 
Lezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern StrutturaliLezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern StrutturaliAndrea Della Corte
 
Lezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern CreazionaliLezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern CreazionaliAndrea Della Corte
 
Lezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e SubversionLezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e SubversionAndrea Della Corte
 
Lezione 3: Sviluppo in Extreme Programming
Lezione 3: Sviluppo in Extreme ProgrammingLezione 3: Sviluppo in Extreme Programming
Lezione 3: Sviluppo in Extreme ProgrammingAndrea Della Corte
 
Lezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme ProgrammingLezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme ProgrammingAndrea Della Corte
 
Lezione 9: Web Service in Java
Lezione 9: Web Service in JavaLezione 9: Web Service in Java
Lezione 9: Web Service in JavaAndrea Della Corte
 
Lezione 7: Remote Method Invocation e SSL
Lezione 7: Remote Method Invocation e SSLLezione 7: Remote Method Invocation e SSL
Lezione 7: Remote Method Invocation e SSLAndrea Della Corte
 
Lezione 6: Remote Method Invocation
Lezione 6: Remote Method InvocationLezione 6: Remote Method Invocation
Lezione 6: Remote Method InvocationAndrea Della Corte
 
Lezione 4: Comunicazione con UDP
Lezione 4: Comunicazione con UDPLezione 4: Comunicazione con UDP
Lezione 4: Comunicazione con UDPAndrea Della Corte
 

Plus de Andrea Della Corte (20)

Lezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern ComportamentaliLezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern Comportamentali
 
Lezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern ComportamentaliLezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern Comportamentali
 
Lezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern ComportamentaliLezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern Comportamentali
 
Lezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern StrutturaliLezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern Strutturali
 
Lezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern StrutturaliLezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern Strutturali
 
Lezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern CreazionaliLezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern Creazionali
 
Lezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e SubversionLezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e Subversion
 
Lezione 3: Sviluppo in Extreme Programming
Lezione 3: Sviluppo in Extreme ProgrammingLezione 3: Sviluppo in Extreme Programming
Lezione 3: Sviluppo in Extreme Programming
 
Lezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme ProgrammingLezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme Programming
 
Lezione 1: I metodi agili
Lezione 1: I metodi agiliLezione 1: I metodi agili
Lezione 1: I metodi agili
 
Lezione 5: Socket SSL/ TLS
Lezione 5: Socket SSL/ TLSLezione 5: Socket SSL/ TLS
Lezione 5: Socket SSL/ TLS
 
Lezione 9: Web Service in Java
Lezione 9: Web Service in JavaLezione 9: Web Service in Java
Lezione 9: Web Service in Java
 
Lezione 7: Remote Method Invocation e SSL
Lezione 7: Remote Method Invocation e SSLLezione 7: Remote Method Invocation e SSL
Lezione 7: Remote Method Invocation e SSL
 
Lezione 6: Remote Method Invocation
Lezione 6: Remote Method InvocationLezione 6: Remote Method Invocation
Lezione 6: Remote Method Invocation
 
Lezione 1: I/O in Java
Lezione 1: I/O in JavaLezione 1: I/O in Java
Lezione 1: I/O in Java
 
Lezione 2: I thread
Lezione 2: I threadLezione 2: I thread
Lezione 2: I thread
 
Lezione 3: Connessioni TCP
Lezione 3: Connessioni TCPLezione 3: Connessioni TCP
Lezione 3: Connessioni TCP
 
Lezione 4: Comunicazione con UDP
Lezione 4: Comunicazione con UDPLezione 4: Comunicazione con UDP
Lezione 4: Comunicazione con UDP
 
Tutorial Matlab 2009
Tutorial Matlab 2009Tutorial Matlab 2009
Tutorial Matlab 2009
 
Introduzione ai CRM
Introduzione ai CRMIntroduzione ai CRM
Introduzione ai CRM
 

Dernier

TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptx
TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptxTeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptx
TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptxteccarellilorenzo
 
Pancia Asia-Pelusi Sara-La pittura romana - Copia (1).pptx
Pancia Asia-Pelusi Sara-La pittura romana - Copia (1).pptxPancia Asia-Pelusi Sara-La pittura romana - Copia (1).pptx
Pancia Asia-Pelusi Sara-La pittura romana - Copia (1).pptxpalestiniaurora
 
Educazione civica-Asia Pancia powerpoint
Educazione civica-Asia Pancia powerpointEducazione civica-Asia Pancia powerpoint
Educazione civica-Asia Pancia powerpointpalestiniaurora
 
PalestiniAurora-la conoscenzatestoita.docx
PalestiniAurora-la conoscenzatestoita.docxPalestiniAurora-la conoscenzatestoita.docx
PalestiniAurora-la conoscenzatestoita.docxpalestiniaurora
 
Piccole Personetestoitaliano-AuroraPalestini.docx
Piccole Personetestoitaliano-AuroraPalestini.docxPiccole Personetestoitaliano-AuroraPalestini.docx
Piccole Personetestoitaliano-AuroraPalestini.docxpalestiniaurora
 
Storia-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptxStoria-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptxteccarellilorenzo
 
Le forme allotropiche del C-Palestini e Pancia.docx
Le forme allotropiche del C-Palestini e Pancia.docxLe forme allotropiche del C-Palestini e Pancia.docx
Le forme allotropiche del C-Palestini e Pancia.docxpalestiniaurora
 
Gli isotopi scienze naturale seconda pres
Gli isotopi scienze naturale seconda presGli isotopi scienze naturale seconda pres
Gli isotopi scienze naturale seconda prespalestiniaurora
 
a scuola di biblioVerifica: come utilizzare il test TRAAP
a scuola di biblioVerifica: come utilizzare il test TRAAPa scuola di biblioVerifica: come utilizzare il test TRAAP
a scuola di biblioVerifica: come utilizzare il test TRAAPDamiano Orru
 
Pancia Asia_relazione laboratorio(forza d'attrito).docx
Pancia Asia_relazione laboratorio(forza d'attrito).docxPancia Asia_relazione laboratorio(forza d'attrito).docx
Pancia Asia_relazione laboratorio(forza d'attrito).docxpalestiniaurora
 
Palestini Aurora-Steve Jobs,Olivetti e Gates.pptx
Palestini Aurora-Steve Jobs,Olivetti e Gates.pptxPalestini Aurora-Steve Jobs,Olivetti e Gates.pptx
Palestini Aurora-Steve Jobs,Olivetti e Gates.pptxpalestiniaurora
 
Pancia Asia-La vita di Steve Jobs-Adriano Olivetti-Bill Gates.pptx
Pancia Asia-La vita di Steve Jobs-Adriano Olivetti-Bill Gates.pptxPancia Asia-La vita di Steve Jobs-Adriano Olivetti-Bill Gates.pptx
Pancia Asia-La vita di Steve Jobs-Adriano Olivetti-Bill Gates.pptxpalestiniaurora
 
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptxAdducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptxsasaselvatico
 
Una breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opereUna breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opereMarco Chizzali
 
presentazione varietà allotropiche del carbonio.pptx
presentazione varietà allotropiche del carbonio.pptxpresentazione varietà allotropiche del carbonio.pptx
presentazione varietà allotropiche del carbonio.pptxmichelacaporale12345
 
TeccarelliLorenzo-Mitodella.cavernaa.pdf
TeccarelliLorenzo-Mitodella.cavernaa.pdfTeccarelliLorenzo-Mitodella.cavernaa.pdf
TeccarelliLorenzo-Mitodella.cavernaa.pdfteccarellilorenzo
 
Le forme allotropiche del C-Palestini e Pancia.docx
Le forme allotropiche del C-Palestini e Pancia.docxLe forme allotropiche del C-Palestini e Pancia.docx
Le forme allotropiche del C-Palestini e Pancia.docxpalestiniaurora
 
magia, stregoneria, inquisizione e medicina.pptx
magia, stregoneria, inquisizione e medicina.pptxmagia, stregoneria, inquisizione e medicina.pptx
magia, stregoneria, inquisizione e medicina.pptxpalestiniaurora
 
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024IISGiovanniVallePado
 
magia, stregoneria, inquisizione e medicina.pptx
magia, stregoneria, inquisizione e medicina.pptxmagia, stregoneria, inquisizione e medicina.pptx
magia, stregoneria, inquisizione e medicina.pptxpalestiniaurora
 

Dernier (20)

TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptx
TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptxTeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptx
TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptx
 
Pancia Asia-Pelusi Sara-La pittura romana - Copia (1).pptx
Pancia Asia-Pelusi Sara-La pittura romana - Copia (1).pptxPancia Asia-Pelusi Sara-La pittura romana - Copia (1).pptx
Pancia Asia-Pelusi Sara-La pittura romana - Copia (1).pptx
 
Educazione civica-Asia Pancia powerpoint
Educazione civica-Asia Pancia powerpointEducazione civica-Asia Pancia powerpoint
Educazione civica-Asia Pancia powerpoint
 
PalestiniAurora-la conoscenzatestoita.docx
PalestiniAurora-la conoscenzatestoita.docxPalestiniAurora-la conoscenzatestoita.docx
PalestiniAurora-la conoscenzatestoita.docx
 
Piccole Personetestoitaliano-AuroraPalestini.docx
Piccole Personetestoitaliano-AuroraPalestini.docxPiccole Personetestoitaliano-AuroraPalestini.docx
Piccole Personetestoitaliano-AuroraPalestini.docx
 
Storia-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptxStoria-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptx
 
Le forme allotropiche del C-Palestini e Pancia.docx
Le forme allotropiche del C-Palestini e Pancia.docxLe forme allotropiche del C-Palestini e Pancia.docx
Le forme allotropiche del C-Palestini e Pancia.docx
 
Gli isotopi scienze naturale seconda pres
Gli isotopi scienze naturale seconda presGli isotopi scienze naturale seconda pres
Gli isotopi scienze naturale seconda pres
 
a scuola di biblioVerifica: come utilizzare il test TRAAP
a scuola di biblioVerifica: come utilizzare il test TRAAPa scuola di biblioVerifica: come utilizzare il test TRAAP
a scuola di biblioVerifica: come utilizzare il test TRAAP
 
Pancia Asia_relazione laboratorio(forza d'attrito).docx
Pancia Asia_relazione laboratorio(forza d'attrito).docxPancia Asia_relazione laboratorio(forza d'attrito).docx
Pancia Asia_relazione laboratorio(forza d'attrito).docx
 
Palestini Aurora-Steve Jobs,Olivetti e Gates.pptx
Palestini Aurora-Steve Jobs,Olivetti e Gates.pptxPalestini Aurora-Steve Jobs,Olivetti e Gates.pptx
Palestini Aurora-Steve Jobs,Olivetti e Gates.pptx
 
Pancia Asia-La vita di Steve Jobs-Adriano Olivetti-Bill Gates.pptx
Pancia Asia-La vita di Steve Jobs-Adriano Olivetti-Bill Gates.pptxPancia Asia-La vita di Steve Jobs-Adriano Olivetti-Bill Gates.pptx
Pancia Asia-La vita di Steve Jobs-Adriano Olivetti-Bill Gates.pptx
 
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptxAdducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
 
Una breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opereUna breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opere
 
presentazione varietà allotropiche del carbonio.pptx
presentazione varietà allotropiche del carbonio.pptxpresentazione varietà allotropiche del carbonio.pptx
presentazione varietà allotropiche del carbonio.pptx
 
TeccarelliLorenzo-Mitodella.cavernaa.pdf
TeccarelliLorenzo-Mitodella.cavernaa.pdfTeccarelliLorenzo-Mitodella.cavernaa.pdf
TeccarelliLorenzo-Mitodella.cavernaa.pdf
 
Le forme allotropiche del C-Palestini e Pancia.docx
Le forme allotropiche del C-Palestini e Pancia.docxLe forme allotropiche del C-Palestini e Pancia.docx
Le forme allotropiche del C-Palestini e Pancia.docx
 
magia, stregoneria, inquisizione e medicina.pptx
magia, stregoneria, inquisizione e medicina.pptxmagia, stregoneria, inquisizione e medicina.pptx
magia, stregoneria, inquisizione e medicina.pptx
 
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
 
magia, stregoneria, inquisizione e medicina.pptx
magia, stregoneria, inquisizione e medicina.pptxmagia, stregoneria, inquisizione e medicina.pptx
magia, stregoneria, inquisizione e medicina.pptx
 

Lezione 11: Accesso ai RESTful Web Services in Java

  • 1. Lezione 11: Accesso ai RESTful Web Services in Java Corso di Programmazione in Rete Laurea Magistrale in Ing. Informatica Università degli Studi di Salerno 1
  • 2. Outline ✦ Struttura di un WS RESTful ✦ Realizzazione di client in Java: le classi URL e HttpURLConnection ✦ La codifica x-www-form-urlencoded 2
  • 3. Struttura di un WS RESTful ✦ Elementi fondamentali di un Web Service basato sull’architettura REST: • Risorse • Rappresentazioni delle risorse • Operazioni sulle risorse 3
  • 4. Risorse ✦ Un servizio RESTful gestisce un insieme di risorse • Esempio: in un sistema di commercio elettronico le risorse possono essere i prodotti e gli ordini ✦ Una risorsa può rappresentare una “collezione” di altre risorse • Esempio: una risorsa può rappresentare l’insieme degli ordini effettuati da un determinato utente 4
  • 5. Risorse ✦ Ogni risorsa è identificata attraverso un URL specifico • è semplice trasferire l’indirizzo di una risorsa ad un altra applicazione, creare dei collegamenti tra risorse, mantenere dei “bookmark” ecc. ✦ Esempio: • http://mycommerce.com/products ‣ Insieme dei prodotti • http://mycommerce.com/products/14287 ‣ Singolo prodotto 5
  • 6. Rappresentazioni ✦ Le risorse sono entità astratte caratterizzate da uno stato che può cambiare nel tempo • ad esempio, un prodotto ha un nome, una descrizione, un prezzo, una disponibilità ecc. ✦ Il client e il server comunicano scambiandosi rappresentazioni dello stato delle risorse (ecco perché si parla di REpresentational State Transfer) ✦ Il formato della rappresentazione deve essere concordato tra il client e il server 6
  • 7. Rappresentazioni ✦ Ciascuna risorsa può avere più rappresentazioni diverse • Ad esempio, le risorse del nostro sito di commercio elettronico possono essere rappresentate: ‣ in formato HTML per la visualizzazione ad un utente che accede mediante un browser web ‣ in formato PDF per la stampa ‣ in formato XML per consentire l’elaborazione da parte di un’altra applicazione ‣ in formato JSON per consentire l’elaborazione da parte di un JavaScript presente in una pagina web 7
  • 8. Rappresentazioni ✦ Nel protocollo HTTP, il formato di una risorsa viene identificato attraverso la codifica definita nello standard MIME (Multimedia Internet Mail Extension) ✦ Un “MIME type” è specificato da una stringa che ha come formato: • type/subtype • type/subtype; options 8
  • 9. Rappresentazioni ✦ I nomi dei tipi MIME sono assegnati dall’IANA (Internet Assigned Number Authority) ✦ Esempi: • text/plain formato testo semplice • text/plain; charset=UTF-8 testo semplice • text/html formato HTML • application/xml formato XML • image/jpeg formato JPEG 9
  • 10. Operazioni ✦ Nell’approccio REST si usa un numero limitato di operazioni per leggere o modificare lo stato delle risorse ✦ Le operazioni corrispondono ai “metodi” definiti nel protocollo HTTP ✦ Non tutte le operazioni sono disponibili su tutte le risorse 10
  • 11. Operazioni: GET ✦ L’operazione GET consente di ottenere una rappresentazione della risorsa ✦ È l’operazione di default per i browser web ✦ Non deve modificare lo stato delle risorse • il risultato dell’operazione può essere temporaneamente mantenuto in una cache per migliorare le prestazioni 11
  • 12. Operazioni: GET ✦ Nota: alcune web applications usano GET anche per modificare lo stato delle risorse • vantaggio: l’operazione GET è semplice da testare usando un browser web • svantaggio: problemi con cache, proxy e altri componenti dell’infrastruttura del web • l’uso di GET per operazioni che modificano lo stato è considerato una violazione della filosofia REST 12
  • 13. Operazioni: PUT ✦ L’operazione PUT modifica lo stato di una risorsa, o crea la risorsa se l’URL specificato non ha una risorsa corrispondente ✦ I browser web normalmente non usano PUT, ma le “cartelle web” disponibili nei principali sistemi operativi consentono di usare questa operazione per scrivere su un server (se il server lo permette) 13
  • 14. Operazioni: DELETE ✦ L’operazione DELETE cancella una risorsa dal server ✦ Anche questa operazione non è normalmente usata da un browser, ma supportata da altri client come le “cartelle web” 14
  • 15. Operazioni: POST ✦ L’operazione POST è usata per l’aggiunta di nuove risorse a una collezione ✦ È usata dai browser web per l’invio dei form ✦ A differenza di GET, PUT e DELETE, l’operazione POST non è idempotente: eseguire due volte la stessa operazione produce uno stato diverso da una singola esecuzione 15
  • 16. Operazioni: POST ✦ Per la creazione di nuove risorse si può usare sia PUT che POST • PUT richiede di specificare l’URL della risorsa da creare; va usata quando si desidera che sia il client a decidere l’URL delle nuove risorse • POST richiede di specificare l’URL della collezione che conterrà la risorsa da creare; va usata quando si desidera che sia il server a decidere l’URL delle nuove risorse 16
  • 17. Operazioni: POST ✦ Diverse applicazioni usano solo i metodi GET e POST; tutte le operazioni che modificano lo stato sono codificate usando POST con opportuni parametri • vantaggio: è possibile testare le operazioni usando un form HTML • questa soluzione è considerata una parziale violazione della filosofia REST ✦ XML-RPC e SOAP codificano le richieste di esecuzione di un metodo in un’operazione POST 17
  • 18. Esecuzione di un’operazione ✦ Il protocollo HTTP ha una struttura richiesta/risposta, in cui ogni interazione viene considerata indipendente dalle altre (il protocollo è stateless) • il client invia la richiesta • il server elabora la richiesta • il server invia la risposta, contenente eventualmente un’indicazione di errore 18
  • 19. Esecuzione di un’operazione ✦ Una richiesta HTTP contiene: • l’URL della risorsa a cui è riferita • l’operazione da effettuare (es. GET) • informazioni aggiuntive (headers), ad esempio per indicare il tipo di rappresentazione richiesta • per alcune operazioni, un “corpo” della richiesta (body); in particolare il body è presente nelle operazioni PUT e POST 19
  • 20. Esecuzione di un’operazione ✦ Una risposta HTTP contiene: • un codice numerico che indica l’esito dell’operazione (status) • informazioni aggiuntive (headers); ad esempio, il tipo di rappresentazione restituito • per alcune operazioni, un “corpo” della risposta (body) 20
  • 21. Status ✦ Lo status è codificato su 3 cifre ✦ La prima cifra indica l’esito generale: • 2xx: operazione eseguita con successo • 3xx: redirezione (la risorsa desiderata si trova a un altro indirizzo) • 4xx: errore da parte del client • 5xx: errore interno al server 21
  • 22. Status ✦ Le due cifre successive forniscono maggiori dettagli. Ad esempio: ‣ 200: OK ‣ 201: OK, creata nuova risorsa con URL specificato negli header ‣ 204: OK senza response body ‣ 301: Redirezione permanente ‣ 307: Redirezione temporanea ‣ 401: Utente non autorizzato a eseguire l’operazione ‣ 404: Risorsa non trovata ‣ 501: Metodo non implementato ‣ 505: Versione del protocollo non supportata 22
  • 23. Definizione di un WS ✦ Nella definizione del web service, occorre specificare: • quali operazioni sono permesse per ciascun URL • quali formati sono accettati per il body della richiesta e della risposta • i codici di stato restituiti ✦ La definizione è solitamente informale, ma sono stati proposti linguaggi per la descrizione di un WS RESTful: • WSDL 2.0 23 • WADL
  • 24. Client in Java ✦ Un client RESTful deve: • individuare la risorsa di cui vuole consultare o modificare lo stato • preparare una richiesta indicando l’operazione da effettuare e le altre informazioni aggiuntive • inviare la richiesta e ottenere la risposta • esaminare lo status della risposta ed estrarre le informazioni di interesse dal body e dagli header ✦ Le classi necessarie sono: URL e HttpURLConnection, definite in java.net 24
  • 25. La classe URL ✦ Consente di costruire un URL, eventualmente a partire da un URL relativo ✦ Consente di creare una connessione alla risorsa identificata dall’URL (istanziando la classe HttpURLConnection) 25
  • 26. La classe URL ✦ Costruttori: • URL(String url) throws MalformedURLException • URL(URL base, String relativePart) throws MalformedURLException ‣ il secondo costruttore produce un URL relativo a partire dall’URL base ✦ Esempio: public static void main(String args[]) throws Exception { URL base=new URL("http://nerone.diiie.unisa.it/plone/adinf/"); URL corso=new URL(base, "Corsi_new/Informatica Magistrale/Programmazione in Rete"); System.out.println(corso); } 26
  • 27. HttpURLConnection ✦ Per connettersi alla risorsa occorre usare un oggetto della classe HttpURLConnection ✦ Tale oggetto viene costruito dal metodo openConnection() di URL: • URLConnection openConnection() throws IOException; ‣ NOTA: poiché il valore di ritorno è un URLConnection, occorre un cast per ottenere un HttpURLConnection 27
  • 28. HttpURLConnection ✦ Una volta ottenuto l’oggetto che rappresenta la connessione, occorre: • impostare il metodo e, se necessario, gli header della richiesta • chiamare il metodo connect() per attivare la connessione • inviare (se necessario) il request body • leggere lo status code e, se necessario, gli header della risposta • leggere il body della risposta 28
  • 29. Preparazione ✦ Per impostare il metodo HTTP da usare, occorre richiamare: • void setRequestMethod(String method) throws IOException; ‣ Nota: il nome dei metodi HTTP è case sensitive; occorre usare “GET” e non “get”. ‣ Nota: per default la classe usa il metodo GET 29
  • 30. Preparazione ✦ È possibile specificare gli header della richiesta con il metodo: • void setRequestProperty(String name, String value) ✦ Tra gli header della richiesta più importanti: • “Content-Type”: tipo MIME del request body • “Accept”: lista (separata da virgole) dei tipi MIME accettati per il response body 30
  • 31. Preparazione ✦ Esempio HttpURLConnection conn=(HttpURLConnection)url.openConnection(); conn.setRequestMethod("POST"); conn.setRequestProperty("Content-Type", "text/plain; charset=UTF-8"); conn.setRequestProperty("Accept", "text/plain, text/html"); // continua... 31
  • 32. Preparazione ✦ In fase di preparazione occorre specificare se sarà presente un request body e/o un response body con i metodi: • void setDoOutput(boolean on); ‣ se il parametro true, ci sarà un request body • void setDoInput(boolean on); ‣ se il parametro è true, ci sarà un response body ✦ Per default la connessione assume che ci sia un response body ma non un request body 32
  • 33. Connessione ✦ Dopo la preparazione, l’accesso alla risorsa viene iniziato usando il metodo: • void connect() throws IOException ✦ Una volta avviata la connessione è possibile inviare il request body (se necessario) e quindi leggere la risposta ✦ L’oggetto HttpURLConnection richiama automaticamente connect quando viene usato uno dei metodi che richiedono la connessione 33
  • 34. Invio del request body ✦ È possibile inviare il request body al server attraverso un output stream ottenuto dal metodo: • OutputStream getOutputStream() throws IOException ✦ NOTA: i dati sono bufferizzati in memoria, e inviati solo al momento in cui è eseguito il metodo close dell’output stream 34
  • 35. Uso della risposta ✦ Per leggere lo status della risposta: • int getResponseCode() throws IOException ✦ Per leggere il body della risposta: • String getContentType(); // tipo MIME della risposta • InputStream getInputStream() throws IOException; // stream attraverso cui leggere il dato ‣ NOTA: occorre usare il metodo close() dello stream per assicurarsi che vengano rilasciate le risorse (es. socket TCP) usate dalla connessione 35
  • 36. Esempio ✦ Esempio di una operazione GET import java.net.*; import java.io.*; public class EsempioGet { public static void main(String args[]) throws Exception { URL url=new URL("http://en.wikipedia.org/wiki/Representational_State_Transfer"); HttpURLConnection conn=(HttpURLConnection)url.openConnection(); int status=conn.getResponseCode(); System.out.println("RESPONSE CODE: "+status); System.out.println("CONTENT TYPE: "+conn.getContentType()); if (status>=200 && status<=299) { InputStreamReader in=new InputStreamReader(conn.getInputStream(), "UTF-8"); int c; while ((c=in.read())!=-1) System.out.print((char)c); } } } 36
  • 37. URL encoding ✦ Per passare i contenuti di un form al server web è stato definito il tipo application/x-www-form-urlencoded • usato normalmente per il request body dell’operazione POST nell’invio di form • può essere usato per passare informazioni aggiuntive anche alle altre operazioni (es. GET) inserendo i dati nella URL dopo un ‘?’ (query string) 37
  • 38. URL encoding ✦ Un contenuto di questo tipo è costituito da un insieme di coppie (chiave, valore) codificate in una stringa, usando ‘&’ per separare le coppie e ‘=’ per separare chiavi e valori: • chiave1=valore1&chiave2=valore2&... ✦ Le chiavi e i valori devono essere codificati usando una codifica detta URL encoding per proteggere i caratteri speciali (es. / o &) che hanno un significato in una URL 38
  • 39. URL encoding ✦ Le classi URLEncoder e URLDecoder forniscono metodi per codificare/ decodificare l’URL encoding ✦ In particolare, per la codifica si usa il metodo statico di URLEncoder: • static String encode(String value, String charset); ✦ Nota: • lo standard dice che il charset da usare per la query string è UTF-8 mentre per il request body va specificato nel tipo MIME; in pratica molti server scelgono un charset fisso indipendentemente dalla richiesta 39
  • 40. Esempio ✦ Un esempio completo di POST import java.net.*; import java.io.*; import java.util.*; public class EsempioPost { public static String encodeForm(Map<String,String> data) { StringBuffer sb=new StringBuffer(); try { for(String key : data.keySet()) { sb.append(URLEncoder.encode(key, "UTF-8")); sb.append('='); sb.append(URLEncoder.encode(data.get(key), "UTF-8")); sb.append('&'); } } catch (UnsupportedEncodingException e) { throw new RuntimeException("Unsupported encoding UTF-8"); } return sb.toString(); } // continua 40
  • 41. Esempio ✦ Un esempio completo di POST (continua) public static void main(String args[]) throws Exception { URL url=new URL("http://www.myservice.com/orders"); Map<String,String> form=new HashMap<String,String>(); form.put("user", "pippo"); form.put("product", "xyz123"); form.put("quantity", "5"); String body=encodeForm(form); HttpURLConnection conn=(HttpURLConnection)url.openConnection(); conn.setRequestMethod("POST"); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); conn.setDoOutput(true); PrintWriter pw=new PrintWriter( new OutputStreamWriter( conn.getOutputStream(), "UTF-8")); // continua 41
  • 42. Esempio ✦ Un esempio completo di POST (continua) pw.print(body); pw.close(); int status=conn.getResponseCode(); System.out.println("RESPONSE CODE: "+status); System.out.println("CONTENT TYPE: "+conn.getContentType()); if (status>=200 && status<=299) { InputStreamReader in=new InputStreamReader(conn.getInputStream(), "UTF-8"); int c; while ((c=in.read())!=-1) System.out.print((char)c); in.close(); } } } 42