REST Il paradigma REST è basato su un protocollo di comunicazione stateless, client-server,...
-
Upload
saveria-bellucci -
Category
Documents
-
view
215 -
download
0
Transcript of REST Il paradigma REST è basato su un protocollo di comunicazione stateless, client-server,...
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:RisorseRappresentazione delle risorseOperazioni 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
RISORSEOgni risorsa è identificata attraverso un URL specificoEsempio:
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 stampajson per essere utilizzata da un altra applicazione.
OperazioniNell’approccio REST si usa un numero limitato di operazioni per leggere o modificare lo stato delle risorseLe operazioni corrispondono ai “metodi” definiti nel protocollo HTTP Non tutte le operazioni sono disponibili su tutte le risorse
operazione Metodo Http
Creazione nuova risorsaidempotente: Sostituzione risorsa esistente
PUT
Creazione nuova risorsaModifica (valori) risorsa preesistente
POST
Cancellazione risorsa DELETE
Accesso (visualizzazione, etc) alla risorsa
GET
Richiesta HTTPUna richiesta HTTP contiene:l’URL della risorsa a cui è riferital’operazione da effettuare (es. GET)informazioni aggiuntive (headers), ad esempio per indicare il tipo di rappresentazione richiestaper alcune operazioni, un “corpo” della richiesta (body); in particolare il body è presente nelle operazioni PUT e POST
User-Agent: Mozilla/5.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language:en-us,en;q=0.5Accept-Encoding:gzip,deflate
Risposta HTTPUna risposta HTTP contiene:un codice numerico che indica l’esito dell’operazione (status)informazioni aggiuntive (headers); ad esempio, il tipo di rappresentazione restituitoper alcune operazioni, un “corpo” della risposta (body)
HTTP/1.1 200 OKX-Powered-By: Servlet 2.4; JBoss-4.2.2.GAContent-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 HTTPLo status è codificato su 3 cifre dove la prima cifra indica l'esito generale:2xx: operazione eseguita con successo3xx: redirezione (la risorsa desiderata si trova aun altro indirizzo)4xx: errore da parte del client5xx: errore interno al server
Formato JsonJSON (JavaScript Object Notation) è un semplice formato per lo scambio di dati. Basato su due strutture:Un insieme di coppie nome/valoreUn 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 JsonI tipi di dato supportati sono:BooleaniInteri,reali,virgola mobileStringheArrayNullStrutture 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
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 DAOSi 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 UtilityQui 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 Configurationqui sono riposte informazioni di cofigurazione del
server.
Json vs Xml
SemplicitàJson ha una grammatica molto più piccola di xmlRidondanzaXML ha una ridondanza maggiore di JSON con conseguente aumento di pesoInteroperabilità 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.