REST Il paradigma REST è basato su un protocollo di comunicazione stateless, client-server, chacheable e scalabile, tipicamente HTTP (ma non necessariamente, in realtà). Elementi fondamentali di un Web Services basato sull'architettura REST: Risorse Rappresentazione delle risorse Operazioni sulle risorse
RISORSE Un servizio RESTful gestisce un insieme di risorse Esempio: nel nostro sistema di carSharing le risorse potranno essere gli utenti le auto, i viaggi Una risorsa può rappresentare una “collezione” di altre risorse Esempio: una risorsa potrà essere un insieme di viaggi che corrispondono a un criterio di ricerca
RISORSE Ogni risorsa è identificata attraverso un URL specifico Esempio: http://CarSharing.com/Car/List/{userId}/{first}/{last} Insieme auto di un utente http://CarSharing.com/Car/{carId} Singola auto Possiamo definire una regola generale nella definizione delle URL: usare pochi tipi di risorse scegliere i tipi di risorse tra concetti di basso livello,mentre concetti più complessi sono costruiti dal client mediante regole proprie.
Rappresentazioni Ciascuna risorsa può avere più rappresentazioni diverse Ad esempio la nostra applicazione potrebbe fornire una rappresentazione di un auto: in formato HTML per la visualizzazione da parte di una pagina web pdf per la stampa json per essere utilizzata da un altra applicazione.
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 operazione Metodo Http Creazione nuova risorsa idempotente: Sostituzione risorsa esistente PUT Modifica (valori) risorsa preesistente POST Cancellazione risorsa DELETE Accesso (visualizzazione, etc) alla risorsa GET
Richiesta HTTP 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 User-Agent: Mozilla/5.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate
Risposta HTTP 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) HTTP/1.1 200 OK X-Powered-By: Servlet 2.4; JBoss-4.2.2.GA Content-Type: text/html <head> <title>JBoss RESTEasy Project</title> </head> <body> <h1>JBoss RESTEasy</h1> <p>JBoss RESTEasy is an open source implementation of the JAX-RS specification..
Satus HTTP Lo status è codificato su 3 cifre dove 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
Formato Json JSON (JavaScript Object Notation) è un semplice formato per lo scambio di dati. Basato su due strutture: Un insieme di coppie nome/valore Un elenco ordinato di valori. Nella maggior parte dei linguaggi questo si realizza con un array, un vettore, un elenco o una sequenza. Queste sono strutture di dati universali. Virtualmente tutti i linguaggi di programmazione moderni li supportano in entrambe le forme.
Formato Json I tipi di dato supportati sono: Booleani Interi,reali,virgola mobile Stringhe Array Null Strutture formate dai parametri supportati. { "type": "menu", "value": "File", "items": [ {"value": "New", "action": "CreateNewDoc"}, {"value": "Open", "action": "OpenDoc"}, {"value": "Close", "action": "CloseDoc"} ] }
Architettura Server Il server dell'applicazione di carSharing, è basato sulla tecnologia REST implementata utilizzando il framework Jersey che aderisce alla JAX-RS che definisce i servizi mediante l'uso di annotazioni. Annotazion @Path Definisce il path della risorsa @GET,@PUT,@DELETE Specifica il tipo di richiesta http @Producer Specifica il tipo di risposta definita secondo MIME media types @Consumer Specifica il formato accettato definito secondo MIME media types @PathParam Associa i parametri al path @CookieParam Associa i parametri ai cookie @DefaultValue Definisce un valore di default in caso il parametro risulti assente.
Architettura Server Il server dell'applicazione di carSharing, offre i propri servizi come REST implementati utilizzando il framework Jersey che aderisce alla JAX-RS che definisce i servizi mediante l'uso di annotazioni. Annotazion @Path Definisce il path della risorsa @GET,@PUT,@DELETE Specifica il tipo di richiesta http @Producer Specifica il tipo di risposta definita secondo MIME media types @Consumer Specifica il formato accettato definito secondo MIME media types @PathParam Associa i parametri al path @CookieParam Associa i parametri ai cookie @DefaultValue Definisce un valore di default in caso il parametro risulti assente.
Architettura Server
DB
Contiene le risorse fornite agli utenti, tra le principali: Package Service Contiene le risorse fornite agli utenti, tra le principali: Risorsa Descrizione User/ Rappresenta un utente User/Feedback Rappresenta un feedback Trip/ Rappresenta un viaggio Trip/Passenger Rappresenta un passeggero di un trip Trip/List Rappresenta un acollezione di viaggi Car Rappresenta un auto Car/List Rappresenta una collezione di auto Notification Rappresenta una collezione di notifiche
Package DAO Si occupa dell'interfacciamento e della gestione del db: ConnectionManager: Si occupa della gestione delle connessioni al db, implementando il riciclo delle stesse gestite tramite un poll di connessioni libere, mediante il pattern singleton DataAccessObject: Realizza le query verso il db , utilizzando una connessione richiesta al connectionManager.
Package Package bean in questo package sono contenute classi che hanno scopo di contenitori di dati. Package Utility Qui vengono offerti dei servizi di supporto all'applicazione come conversione di immagini in stringhe per essere cosi trasportate mediante il protocollo http, gestione della memoria, ecc.. Package Configuration qui sono riposte informazioni di cofigurazione del server.
Json vs Xml Semplicità Json ha una grammatica molto più piccola di xml Ridondanza XML ha una ridondanza maggiore di JSON con conseguente aumento di peso Interoperabilità Json e Xml hanno lo stesso potenziale di interoperabilità. Xml attualmente è molto utilizzato ma Json inizia a farsi conoscere grazie alla facilità di conversione da Xml a Json e la presenza di librerie di parsing nella maggior parte dei linguaggi di programmazione.