REST Il paradigma REST è basato su un protocollo di comunicazione stateless, client-server,...

Post on 01-May-2015

217 views 0 download

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.