REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza...

97
1 Università degli Studi di Firenze Corsi di laurea in Ingegneria delle Telecomunicazioni Ingegneria Informatica REST REpresentational State Transfer Ing. Riccardo Billero [email protected] Dipartimento di Ingegneria dell’Informazione 28 settembre 2015 Sistemi Telematici This slideshow is partially based on Erik Wilde,’s "RESTful Web Services: Principles, Patterns, Emerging Technologies" and Cesare Pautasso’s "RESTful Service Design" seminars

Transcript of REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza...

Page 1: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

1

Università degli Studi di Firenze

Corsi di laurea in Ingegneria delle Telecomunicazioni

Ingegneria Informatica

REST

REpresentational State Transfer

Ing. Riccardo Billero

[email protected]

Dipartimento di Ingegneria dell’Informazione

28 settembre 2015 Sistemi Telematici

This slideshow is partially based on Erik Wilde,’s "RESTful Web Services: Principles, Patterns, Emerging Technologies" and Cesare Pautasso’s "RESTful Service Design" seminars

Page 2: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Web Services

• Un web service è un programma che:

– Utilizza una connessione web

– Richiede ad un server esterno di fornire dati o eseguire un algoritmo

• Possibili tipologie

– RESTful

– RPC style

– Ibrido REST-RPC

Page 3: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Web Apps vs Web Services

• Quale è la differenza tra una web application ed un web service?

• Web application

– Sito pensato per essere usato da altre persone

• Web service

– Sito pensato per essere usato da altre macchine

Page 4: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

REST

• Il REpresentational State Transfer è uno stile architetturale per lo sviluppo di web services

– Un insieme di vincoli applicati nella progettazione di una architettura

• Introdotto nel 2001 da Roy Fielding

• Si sostiene che possa essere visto come la base di HTTP

– In realtà è stato distillato ex post da HTTP

Page 5: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Cosa è una architettura?

• L’architettura è una progettazione basata sui vincoli – I vincoli sono definiti dai requisiti

– Progettare senza vincoli è, forse, arte

• I vincoli sono derivati da una ampia varietà di sorgenti – Infrastrutture tecniche

– Considerazioni di business

– Orizzonte temporale (breve termine vs. lungo termine)

– Architettura esistente

– Scalabilità

– Performance

– Costi (progettazione, sviluppo, manutenzione)

Page 6: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Esempi di architetture

New York (NY, USA) Lübeck (Schleswig-Holstein, Germania)

Page 7: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Stili architetturali e architetture

• Stile architetturale: Principi generali che improntano la creazione di una architettura

• Architettura: Progettare la soluzione ad un problema seguendo vincoli dati

• Gli stili architetturali danno forma e guidano la creazione delle architetture

Page 8: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Stili architetturali e architetture (1)

• Architettura: Cathédrale Notre-Dame de Chartres

– Patrimonio mondiale UNESCO

• Stile architetturale: Gotico internazionale

Page 9: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Stili architetturali e architetture (2)

• Architettura: Würzburger Residenz

– Patrimonio mondiale UNESCO

• Stile architetturale: Barocco

Page 10: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

REST non è una architettura

• Il REST è uno stile architetturale

– Distillato a posteriori dal Web

– Alcuni standard e pratiche Web non sono RESTful

• Il Web è un sistema informativo che segue REST

• Potrebbero essere progettati altri sistemi informativi RESTful

– Interfacce uniformi diverse (non usare metodi HTTP)

– Rappresentazioni diverse (non usare HTML o XML)

– Identificazione diversa (non usare URIs)

Page 11: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Lo stile architetturale REST

• ROA (Resource Oriented Architecture) è un insieme di linee guida per implementare un web service RESTful

• I principi alla base di una architettura RESTful:

A. Resource Identification

B. Uniform Interface

C. Self-Descriptive Messages

D. Hypermedia As The Engine Of Application State

E. Stateless Interactions

Page 12: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

IDENTIFICARE RISORSE: GLI URI

Page 13: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Resource Identification

• Risorsa: qualsiasi cosa sufficientemente importante da poter essere considerata come entità a sé stante

– Qualcosa rappresentabile in un computer

– Un oggetto fisico (una mela, un tavolo, ecc…)

• Dare un nome a tutto ciò di cui si vuole parlare:

– Prodotti in un negozio online

– Categorie utilizzate per raggruppare i prodotti

– Clienti che intendono comperare i prodotti

– Carrelli dove i clienti inseriscono i prodotti

Page 14: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Identificare risorse sul Web

• Gli URI (Uniform Resource Identifier) sono essenziali per implementare la Resource Identification

• Gli URI sono identificatori universali per le cose, generalmente leggibili dagli esseri umani

– Taluni schemi di identificazione non sono leggibili dagli esseri umani

• Importante identificare univocamente e universalmente ogni cosa

– Rimuove la necessità di dare uno scope agli identificatori

– Permette di parlare riguardo le cose esattamente allo stesso modo

Page 15: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Gli URI

Tim Berners Lee:

“The URI is the fundamental technology of the Web. There were hypertext systems before HTML, and Internet protocols before HTTP, but they didn’t talk to each other. The URI interconnected all these Internet protocols into a Web, the way TCP/IP interconnected networks like Usenet, Bitnet, and CompuServe into a single Internet. Then the Web co-opted those other protocols and killed them off, just like the Internet did with private networks.”

Page 16: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Gli URI Tim Berners Lee:

“Today we surf the Web (not Gopher), download files from the Web (not FTP sites), search publications from the Web (not WAIS), and have conversations on the Web (not Usenet newsgroups).

Version control systems like Subversion work over the Web, as opposed to the custom CVS protocol. Even email is slowly moving onto the Web.”

Page 17: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Gli URI Tim Berners Lee:

“The web kills off other protocols because it has something most protocols lack: a simple way of labeling every available item. Every resource on the Web has at least one URI. You can stick a URI on a billboard.

People can see that billboard, type that URI into their web browsers, and go right to the resource you wanted to show them. It may seem strange, but this everyday interaction was impossible before URIs were invented. ”

Page 18: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Linee guida per gli URI

• Preferire i nomi ai verbi

GET /book?isbn=24&action=delete

DELETE /book/24

• Mantenere gli URI brevi

• Definire URI «carini»

• Non cambiare gli URI

– Utilizzare la redirection se davvero serve cambiarli

• NOTA: Gli URI REST sono identificatori che devono essere scoperti seguendo i collegamenti ipertestuali e non devono essere costruiti dal client

Page 19: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

URI Template (1)

• Una tecnica per definire URI che includano parametri, che devono essere sostituiti prima di utilizzare l’URI

– http://example.com/prodotti/id

• Il REST non si cura di dettagli sugli URI

• L’URI Template non è richiesto dal REST, tecnicamente parlando

– Praticamente parlando, l’URI Template si rivela una best practice

– Attenzione a non creare accoppiamento con il server

Page 20: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

URI Templates (2)

• Gli URI Templates specificano come costruire ed effettuare il parsing di URI parametrici

– Sul server sono spesso usati per configurare "regole di routing"

– Sul client sono utilizzati per istanziare URI a partire da parametri locali

URI Template

parametri

client

URI

URI Template

URI

server

parametri

Page 21: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

URI Templates (3)

• Non usare URI o URI Templates hardcoded nel client!

• Ridurre l’accoppiamento prendendo l’URI Template dal server dinamicamente e riempiendolo nel client

http://www.myservice.com/order/oid/item/iid

http://www.myservice.com/order/XYZ/item/12345

http://www.google.com/search?-join|&|q,num

http://www.google.com/search?q=REST&num=10

Page 22: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

INTERFACCIA UNIFORME: I METODI

Page 23: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Uniform Interface

• Lo stesso piccolo insieme di operazioni si applica a tutto

• Un piccolo insieme di verbi applicato ad un largo insieme di sostantivi

• I verbi sono universali e non sono inventati in base all’applicazione

– Se servono nuovi verbi a molte applicazioni, l’interfaccia può essere estesa

• Il linguaggio naturale funziona nello stesso modo (nuovi verbi sono introdotti raramente)

Page 24: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Metodi HTTP REST

Metodo Semantica

POST Crea una sottorisorsa

GET Restituisce una rappresentazione della risorsa

PUT Inizializza o aggiorna lo stato di una risorsa

DELETE Elimina una risorsa

• Altre operazioni – HEAD: legge i metadati di una risorsa (GET senza response body)

– OPTIONS: elenco di operazioni possibili su una risorsa

– PATCH: modificare una parte di una risorsa

Page 25: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Metodo POST

• Il metodo POST consente di creare risorse come subordinate ad una esistente

– In pratica una operazione di "append"

• Spesso, il server risponde con: 201 Created

• Nel response header Location è indicato l’URI della risorsa creata

– Tale URI può essere utilizzato per future GET, PUT, DELETE

Page 26: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

POST vs GET

• GET è una operazione di sola lettura

– Può essere ripetuta senza generare effetti sullo stato della risorsa (idempotente) e cachata

– N.B. Questo non vuol dire che ogni volta sarà restituita la stessa rappresentazione

• POST è una operazione di lettura e scrittura

– Potrebbe modificare lo stato della risorsa

– Potrebbe provocare effetti collaterali sul server

– I web browser avvisano in caso di refresh di una pagina generata con POST

Page 27: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

POST vs PUT (1)

• Quale è il modo giusto per creare le risorse?

PUT /resource/id

201 Created

• Problema: come assicurarsi che l’identificativo della risorsa id sia univoca?

• Soluzione 1: lasciare che sia il client a scegliere un id univoco (es. GUID)

Page 28: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

POST vs PUT (2)

POST /resource

301 Moved Permanently

Location: /resource/id

• Soluzione 2: lasciare che sia il server a calcolare l’id univoco

• Problema: istanze duplicate potrebbero essere create se le richieste sono ripetute a causa di una comunicazione inaffidabile

Page 29: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

POST vs PUT (3)

• Creazione di una risorsa: POST o PUT?

– POST viene utilizzato quando il server decide l’URI

– PUT viene utilizzato quando il client decide l’URI

• PUT è usato anche per aggiornare risorse esistenti

PUT a una nuova risorsa

PUT ad una risorsa esistente

POST

/weblogs n.a. (La risorsa è già esistente)

Non ha effetto Crea un nuovo blog

/weblogs/myblog Crea questo blog Modifica le impostazioni del blog

Crea una nuova entry nel blog

/weblogs/myblog/entries/1 n.a. (Come si è avuto questo URI?)

Modifica questa entry del blog

Inserisce un commento a questa entry

Page 30: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Metodi idempotenti

• Un metodo HTTP idempotente genera sul server lo stesso effetto quando applicato 1 o n volte

– Ovvero la seconda richiesta e le successive lasciano lo stato della risorsa nello stesso stato in cui lo ha lasciato la prima richiesta

– Aritmeticamente: 12 x 0 x 0 x 0 x 0 x 0

• Le richieste idempotenti possono essere processate molte volte senza effetti collaterali

– Se qualcosa va storto (server spento, errore del server) la richiesta può essere ripetuta fino al buon esito

• GET, PUT e DELETE sono idempotenti

Page 31: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Metodi safe

• Un metodo HTTP safe non genera effetti collaterali sul server

• I metodi safe possono essere ripetuti n volte senza effetti collaterali

– Aritmeticamente: 12 x 1 x 1 x 1 x 1 x 1

– In pratica, senza effetti collaterali vuol dire senza effetti collaterali rilevanti

• GET e HEAD sono metodi safe

– Può cambiare il contatore degli accessi, ma viene considerato effetto collaterale irrilevante

Page 32: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Metodi unsafe

• Le richieste unsafe modificano lo stato del server e non possono essere ripetute senza effetti collaterali:

Preleva (200 €)

Versa (200 €)

• Le richieste unsafe richiedono una gestione speciale nei casi eccezionali (es. riconciliare gli stati)

• Le API possono essere riprogettate in alcuni casi per gestire operazioni idempotenti

B = GetBilancio(); // Safe

B = B + 200 €; // Locale

ImpostaBilancio (B); // Idempotente

Page 33: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Metodi idempotenti e safe

Metodo Semantica Idempot. Safe

POST Crea una sottorisorsa NO NO

GET Restituisce una rappresentazione della risorsa SI SI

PUT Inizializza o aggiorna lo stato di una risorsa SI NO

DELETE Elimina una risorsa SI NO

Page 34: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

MESSAGGI AUTODESCRITTIVI: CONTENT NEGOTIATION E RAPPRESENTAZIONI

Page 35: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Self-Descriptive Messages (1)

• Ogni messaggio contiene le informazioni necessarie per la propria gestione

• Le risorse sono entità astratte (non possono essere usate di per sé) :

– L’identificazione delle risorse garantisce che esse siano chiaramente identificate

– L’accesso avviene attraverso l’interfaccia uniforme

Page 36: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Self-Descriptive Messages (2)

• L’accesso alle risorse avviene usando la loro rappresentazione

– Ovvero lo stato attuale della risorsa

– Viene comunicato che tipo di rappresentazione utilizzare

– Il formato di rappresentazione è negoziabile tra pari

• La rappresentazione delle risorse può essere basata su vincoli diversi

– XML e JSON possono rappresentare lo stesso modello

– Qualunque sia la rappresentazione, essa deve supportare i link

Page 37: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Risorsa, URI, Rappresentazione (1)

Page 38: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Risorsa, URI, Rappresentazione (2)

Page 39: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Content Negotiation (1)

• Problema: Se i consumer cambiano requisiti per il formato dei messaggi in modo non retrocompatibile?

• Un service dovrebbe supportare sia i vecchi consumer sia i nuovi, senza dovere introdurre una interfaccia specifica per ogni tipo di consumer

Client

Service

Nuovo Client

?

Page 40: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Content Negotiation (2)

• Soluzione: Utilizzare la Content Negotiation

• I formati di dati specifici da accettare o restituire da parte del service sono negoziati a runtime come parte dell’invocazione. Si parla di media types

• Benefici: minore accoppiamento, interoperabilità maggiore

Client

Service

Nuovo Client

Page 41: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Content Negotiation (3)

• Negoziare il formato dei messaggi non richiede l’aggiunta di ulteriori messaggi (è «a gratis»)

• Il client invia i formati comprensibili (MIME types)

• Il server sceglie il formato più appropriato per la risposta

GET /resource

Accept: text/html, application/xml, application/json

200 OK

Content-Type: application/json

Page 42: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Content Negotiation (4)

• I fattori di qualità permettono al client di indicare un grado di preferenza per ogni rappresentazione

• Si utilizzano valori da 0 a 0.9

– 0: non accettabile

Accept: text/html, text/*; q = 0.1

Accept: application/xhtml+xml; q=0.9, text/html;

q=0.5, text/plain; q=0.1

Page 43: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Content Negotiation forzata

• Talvolta viene utilizzata la pratica di postporre il formato all’URI: – GET /resource.html

– GET /resource.json

• Questa pratica convenzionale non è uno standard

• Cosa succede se la risorsa non può essere rappresentata nel formato richiesto?

Page 44: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Content Negotiation multidimensione

• La Content Negotiation è molto flessibile e può essere utilizzata su differenti dimensioni

Request Header Valori di esempio Response Header

Accept application/xml, application/json

Content-Type

Accept-Language en, fr, de, es Content-Language

Accept-Charset iso-8859-5, unicode-1-1 parametro Charset di Content-Type

Accept-Encoding compress, gzip Content-Encoding

Page 45: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Rappresentazioni

• La rappresentazione scelta dipende da vari fattori

– La natura delle risorse

– La capacità del server

– La capacità del mezzo di comunicazione

– La capacità del client

– Requisiti e vincoli dello scenario applicativo

• La negoziazione consente di ottenere la rappresentazione "migliore"

Page 46: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

XML (eXtensible Markup Language)

• Media type: application/xml

• Il linguaggio da cui "tutto ebbe inizio" – Originato da SGML

– Considerato il primo linguaggio universale per i dati strutturati

• XML è un metalinguaggio – Un linguaggio per rappresentare altri linguaggi

– Molti linguaggi specifici di dominio sono definiti come vocabolari XML

Page 47: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

XML (eXtensible Markup Language)

• XML è solo sintassi e non ha (quasi) semantica

– Semantica minima (ID, URI relative)

– La semantica è lasciata interamente ai vocabolari XML

• XML è costruito intorno ad un modello ad albero

– Ogni documento XML è un albero e perciò limitato in struttura

– XML RESTful introduce i collegamenti ipertestuali per trasformare gli alberi XML in grafi

Page 48: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Esempio XML

<?xml version="1.0"?> <libri> <libro id="1"> <titolo>La Divina Commedia</titolo> <autore>Dante Alighieri</autore> <anno>1321</anno> </libro> <libro id="2"> <titolo>De Vulgari Eloquentia</titolo> <autore>Dante Alighieri</autore> <anno>1305</anno> </libro> </libri>

Page 49: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

XML Parsers

• DOM (Document Object Model)

– Basato sulla struttura del documento

– Ricerche con XPath, CSS, funzioni personalizzate

• SAX (Simple API for XML)

– Basato sugli eventi, con callbacks associate

– Navigazione basata su tags, commenti, ecc…

Page 50: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

XMLHttpRequest

• L’API XMLHttpRequest è stata costruita per richiedere XML via HTTP – Questo è utile perché XML è il formato di interscambio dati più

popolare – Tutti i dati devono essere processati usando metodi per

l’accesso ad XML in JavaScript

• JavaScript non utilizza XML come modello interno per i propri dati – L’XML ricevuto via XMLHttpRequest deve essere parsato in un

albero DOM – L’accesso DOM in JavaScript non è conveniente, per le

operazioni complesse – Alternativamente, l’XML può essere trasformato in oggetti

JavaScript (ma anche questo richiede il parsing)

Page 51: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

JSON (JavaScript Object Notation)

• Media type: application/json

• JSON codifica dati come oggetti JavaScript

– Più efficiente per consumer JavaScript

– Questo modifica i servizi XML usabili genericamente in servizi orientati a JavaScript

– Per servizi su larga scala ha senso fornire XML e JSON

Page 52: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Esempio XML (1)

<?xml version="1.0"?>

<libro id="1">

<titolo>La Divina Commedia</titolo>

<autore>Dante Alighieri</autore>

<anno>1321</anno>

</libro>

Page 53: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Esempio JSON (1)

"libro" :

"id" : "1",

"descr" :

"titolo" : "La Divina Commedia",

"autore" : "Dante Alighieri",

"anno" : "1321"

Page 54: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Esempio XML (2)

<?xml version="1.0"?> <libri> <libro id="1"> <titolo>La Divina Commedia</titolo> <autore>Dante Alighieri</autore> <anno>1321</anno> </libro> <libro id="2"> <titolo>De Vulgari Eloquentia</titolo> <autore>Dante Alighieri</autore> <anno>1305</anno> </libro> </libri>

Page 55: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Esempio JSON (2)

"libri": [ "id" : "1", "descr" : "titolo" : "La Divina Commedia", "autore" : "Dante Alighieri", "anno" : "1321" , "id" : "2", "descr" : "titolo" : "De Vulgari Eloquentia", "autore" : "Dante Alighieri", "anno" : "1305" ]

Page 56: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

RDF (Resource Description Framework)

• Media type: application/rdf+xml • Modo per rappresentare conoscenza riguardo una risorsa

– Qualsiasi cosa abbastanza importante da avere un URI – Basato sull’idea di semantica leggibile e comprensibile dalle

macchine – Costruisce il Semantic Web come un universo sopra il Web

• RDF utilizza gli URI per dare nomi alle cose – Il modello dati di RDF è basato su triple composte da:

• Soggetto (un URI) • Predicato/proprietà (un URI) • Oggetto/valore (un URI o un valore)

– Le triple vengono combinate e con inferenze è possibile comporre grafi

Page 57: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Atom

• Media type: application/atom+xml

• Un vocabolario XML per syndacation feeds

• Più modesto negli obiettivi rispetto XML o RDF

– Modella i feed come un insieme di entries con metadati associati (autore, contributori, linguaggi, copyright, titoli, categorie, ecc…)

– Utilizza links per esprimere le relazioni esistenti nel modello dati

• Gli elenchi sono detti feeds, gli elementi entries

• Molti blog e siti di news espongono feed Atom

Page 58: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Atom (esempio)

<?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom"> <title>Feed di esempio</title> <link href="http://example.org/"/> <updated>2013-05-01T18:30:00Z</updated> <author> <name>Mario Rossi</name> <email>[email protected]</email></author> <id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id> <entry> <title>Post di esempio</title> <link href="http://example.org/2013/05/01/atom03"/> <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> <updated>2013-05-01T18:30:00Z</updated> <summary>Questo è il testo del sommario del post.</summary> </entry> </feed>

Page 59: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

XHTML

• Media type: application/xhtml+xml

• XHTML è un HTML con alcune restrizioni che lo rendono un XML valido

– Alcune differenze sintattiche

• Utile se molti client devono gestire i dati

– Supporta elenchi, coppie chiave-valore, dati tabulari

• Possibile linkare le risorse

– Gli attributi rel e rev esprimono le relazioni tra linkante e linkato

Page 60: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Microformats (1)

• XHTML può essere arricchito coi microformats

– Estendono XHTML per dare semantica specifica di un dominio a tag XHTML

• Vengono estesi i tag HTML, come ol, span, ecc.

• Gli attributi di tali tag (es. rel, rev, class) hanno valori particolari

Page 61: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Esempio hCard

• Modalità per rappresentare informazioni di contatto per persone ed organizzazioni

• Basato su vCard (RFC 2426)

<span class="tel">

<span class="type">home</span>

<span class="value">+39.055.555.555</span>

</span>

Page 62: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Microformats (2)

• Un server web può fornire XHTML contenenti documenti in microformats, insieme ad altre risorse

• L’XHTML può essere mostrato da un browser standard

– Infatti è una pagina HTML

• L’XHTML può essere gestito da appositi parser

– Il microformat "è" un documento XML

Page 63: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Alcuni microformats

• hCalendar: eventi su un calendario

• hCard: biglietto da visita

• VoteLinks: dare opinioni sulle risorse

• XFN (XHTML Friends Network): amicizie

• hAtom: Atom versione XHTML

• rel-license: termini di licenza della risorsa

Sito ufficiale: www.microformats.org

Page 64: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

SVG (1)

• Media type: application/svg+xml

• SVG (Scalable Vector Graphics) è un vocabolario XML che consente descrivere grafica sotto forma di primitive:

– Forme

– Testo

– Colori

– Effetti

• Utile per rappresentare grafici, diagrammi, ecc…

Page 65: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

SVG (2)

• Introdotto nel 2001 è ormai supportato da molti browser

• La grafica è scalabile

Page 66: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Progettare i media type (1)

• Riutilizzare i media types esistenti

• Non aver paura di inventare i propri, ma standardizzandoli, e riusandoli il più possibile

• Non esiste un migliore media type per un service, dipende da ciò che il client necessita, supporta e comprende

• Attenzione: i client non sono obbligati a processare i media type come il programmatore del service si aspetterebbe

Page 67: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Progettare i media type (2)

text/html

Generico, riusabile, senza significato

application/atom+xml

Standardizzato, riusabile, ben definito

application/vnd.my.type+xml

Specifico, meno riusabile, significato forte

RFC 4288 illustra come registrare mediatype personalizzati

Elenco: http://www.iana.org/assignments/media-types/

Page 68: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

HATEOAS

Page 69: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Hypermedia As The Engine of Application State (HATEAOS)

• Sono trasferite rappresentazioni delle risorse contenenti link – Il client può procedere al passo successivo dell’interazione scegliendo

uno di questi link

• Le risorse e lo stato può essere utilizzato navigando i link – I link possono interconnettere risorse navigabili

• Le applicazioni RESTful navigano invece di chiamare – Le rappresentazioni contengono informazioni riguardo possibili

attraversamenti

– Le applicazioni navigano alla prossima risorsa sulla base dei link semantici

– La navigazione può essere delegata, dato che tutti i link utilizzano identificatori

Page 70: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Esempio HATEOAS (1)

GET /conto/12345 HTTP/1.1

HTTP/1.1 200 OK

<?xml version="1.0"?> <conto> <numero>12345</numero> <saldo valuta="eur">500.00</saldo> <link rel="deposito" href="/conto/12345/deposito" /> <link rel="prelievo" href="/conto/12345/prelievo" /> <link rel="bonifico" href="/conto/12345/bonifico" /> <link rel="chiusura" href="/conto/12345/chiusura" /> </conto>

Page 71: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Esempio HATEOAS (2)

GET /conto/12345 HTTP/1.1

HTTP/1.1 200 OK

<?xml version="1.0"?> <conto> <numero>12345</numero> <saldo valuta="eur">-50.00</saldo> <link rel="deposito" href="/conto/12345/deposito" /> </conto>

Page 72: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

STATELESS INTERACTION

Page 73: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Stateless Interactions (1)

• Ogni richiesta dal client al server deve contenere le informazioni necessarie per capire completamente la richiesta, indipendentemente da qualunque richiesta precedente

– La richiesta avviene in completo isolamento

• Non significa applicazioni stateless!

– Per molte applicazioni REST, lo stato è una componente essenziale

– L’idea del REST è quella di evitare transazioni di lunga durata nelle applicazioni

Page 74: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Stateless Interactions (2)

• Lo stato della risorsa è gestito sul server

– È lo stesso per ogni client che lavora con il servizio

– Se un client cambia lo stato della risorsa, gli altri client devono vedere questo cambiamento

• Lo stato del client è gestito sul client

– Specifico per ogni client

– Potrebbe avere effetto sull’accesso al server, ma non sulle risorse stesse

Page 75: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Stato in HTML o HTTP

Page 76: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Stato sul server

Page 77: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Stato come risorsa

Page 78: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Stateless shopping (1)

• Uno scenario tipico di sessione può essere mappato sulle risorse – Client: Mostrami i prodotti

– Server: Qui c’è una lista di tutti i miei prodotti

– Client: Compro 1 di http://ex.org/prodotto/X, sono "Pippo", "password"

– Server: Aggiunto 1 di http://ex.org/prodotto/X a http://ex.org/utenti/pippo/carrello

– Client: Compro 1 di http://ex.org/prodotto/Y, sono "Pippo", "password"

– Server: Aggiunto 1 di http://ex.org/prodotto/Y a http://ex.org/utenti/pippo/carrello

Page 79: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Stateless shopping (2)

• Continua… – Client: Rimuovi 1 di http://ex.org/prodotto/X, sono "Pippo",

"password"

– Server: Rimosso 1 di http://ex.org/prodotto/X a http://ex.org/utenti/pippo/carrello

– Client: OK, ho finito, sono "Pippo", "password"

– Server: Ecco il costo degli oggetti nel carrello http://ex.org/utenti/pippo/carrello

• Questo è più che rinominare da "sessione" a "risorsa" – Tutti i dati rilevanti sono conservati nel server in modo persistente

– L’URI del carrello può essere utilizzato da altri servizi, per lavorare con il relativo contenuto

– Invece di nascondere il carrello nella sessione, esso viene esposto come una risorsa

Page 80: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Riuso delle risorse

Page 81: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

METODOLOGIA DI PROGETTAZIONE

Page 82: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Metodologia di progettazione

1. Identificare le risorse che devono essere esposte come servizio (es. catalogo di libri, ordini di acquisto, urne e voti)

2. Modellare le relazioni (es. contenimento, riferimento, transizione di stato) tra le risorse con collegamenti ipertestuali che possono essere seguiti per ottenere maggiori dettagli (o eseguire transazioni di stato)

3. Definire URI "carini" per indirizzare le risorse

4. Capire cosa significa eseguire GET, POST, PUT e DELETE per ogni risorsa (e se è ammissibile o meno)

5. Progettare e documentare la rappresentazione delle risorse

6. Implementare ed effettuare il deploy su server web

7. Testare con un browser

Page 83: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Esempio: semplice API Doodle (1)

1. Risorse: urne e voti

2. Relazioni di contenimento

poll

id1

vote

id4

id5

id2

id3

Page 84: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Esempio: semplice API Doodle (2)

3. Gli URI contengono gli ID delle risorse figlio

– /poll

– /poll/id

– /poll/id/vote

– /poll/id/vote/id

Page 85: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Esempio: semplice API Doodle (3)

4. POST sui contenitori utilizzata per creare risorse figlie; PUT e DELETE per aggiornare e rimuovere le risorse figlie

GET

PU

T

PO

ST

DEL

ETE

/poll

/poll/id

/poll/id/vote

/poll/id/vote/id

Page 86: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Esempio: semplice API Doodle (4)

1. Creazione di un’urna

2. Lettura di un’urna

Client 1 Client 2 Doodle

POST /poll <options>A, B, C</options> 201 Created Location: /poll/131028x

GET /poll/131028x 200 OK <options>A, B, C</options> <votes href="/vote" />

Page 87: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Esempio: semplice API Doodle (5)

3. Partecipare ad un sondaggio creando una nuova sottorisorsa voto

Client 1 Client 2 Doodle

POST /poll/131028x/vote <name>Mario Rossi</name> <choice>B</choice> 201 Created Location: /poll/131028x/vote/1

GET /poll/131028x 200 OK <options>A, B, C</options> <votes> <vote id="1"> <name>Mario Rossi</name> <choice>B</choice> </vote> </votes>

Page 88: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Esempio: semplice API Doodle (6)

4. Aggiornamento dei voti esistenti

Client 1 Client 2 Doodle

PUT /poll/131028x/vote/1 <name>Mario Rossi</name> <choice>C</choice> 200 OK

GET /poll/131028x 200 OK <options>A, B, C</options> <votes> <vote id="1"> <name>Mario Rossi</name> <choice>C</choice> </vote> </votes>

Page 89: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Esempio: semplice API Doodle (6)

5. Una volta presa la decisione, l’urna può essere cancellata

Client 1 Client 2 Doodle

DELETE /poll/131028x 200 OK

GET /poll/131028x 404 Not Found

Page 90: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

API Doodle

• Doodle:

– http://doodle.com

• Vera API di Doodle:

– http://doodle.com/xsd1/RESTfulDoodle.pdf

Page 91: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

PATTERNS

Page 92: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Redirection (1)

• Problema: Gli URI possono cambiare nel tempo per ragioni varie. Potrebbe essere impossibile rimpiazzare tutti i riferimenti ai vecchi link simultaneamente, introducendo link rotti

• Soluzione: Utilizzare la redirection

Consumer Service Endpoint

Consumer Nuovo Endpoint Vecchio Endpoint

Redirect

Page 93: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Redirection (2)

• HTTP supporta nativamente la redirection:

– 301 Moved Permanently

– 307 Temporary Redirect

– Location: /newURI

• Si può usare una redirection multipla; occhio ai loop!

Consumer /old /new

GET /old

301 Moved Permanently Location: /new

GET /new

200 OK

Page 94: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Gestire la concorrenza

• Come gestire modifiche concorrenti ad una risorsa?

• Non occorre una risorsa «lucchetto»

Consumer 1 /bilancio

GET /bilancio

200 OK ETag: 115

PUT /bilancio Etag: 115

409 Conflict

Consumer 2

PUT /bilancio Etag: 115

200 OK ETag: 205

Page 95: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Risposte «lente»

• Una richiesta lenta potrebbe provocare un timeout

Consumer /lenta

POST /lenta

202 Accepted Location: x

GET /lenta/x

200 OK oppure 204 No Content

Page 96: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

Bibliografia

Leonard Richardson e Sam Ruby

RESTful Web Services

O’Reilly Media

Maggio 2007

Erik Wilde, "RESTful Web Services: Principles, Patterns, Emerging Technologies", ICWE 2010, Vienna

Cesare Pautasso, "RESTful Service Design", ICWE 2010, Vienna

Page 97: REST - UniFI · 2015. 10. 6. · Web Services •Un web service è un programma che: –Utilizza una connessione web –Richiede ad un server esterno di fornire dati o eseguire un

97

Università degli Studi di Firenze

Corsi di laurea in Ingegneria delle Telecomunicazioni

Ingegneria Informatica

REST

REpresentational State Transfer

Ing. Riccardo Billero

[email protected]

Dipartimento di Ingegneria dell’Informazione

28 settembre 2015 Sistemi Telematici

This slideshow is partially based on Erik Wilde,’s "RESTful Web Services: Principles, Patterns, Emerging Technologies" and Cesare Pautasso’s "RESTful Service Design" seminars