REST - Representation State Transfer
Last updated
Last updated
REST è l'acronimo di REpresentation State Transfer. E' uno stile architetturale per i sistemi distribuiti e fu presentato da Roy Fielding nel 2000 in una sua famosa dissertazione.
In simplest words, in the REST architectural style, data and functionality are considered resources and are accessed using Uniform Resource Identifiers (URIs). The resources are acted upon by using a set of simple, well-defined operations. The clients and servers exchange representations of resources by using a standardized interface and protocol – typically HTTP.
Resources are decoupled from their representation so that their content can be accessed in a variety of formats, such as HTML, XML, plain text, PDF, JPEG, JSON, and others. Metadata about the resource is available and used, for example, to control caching, detect transmission errors, negotiate the appropriate representation format, and perform authentication or access control. And most importantly, every interaction with a resource is stateless.
All these principles help RESTful applications to be simple, lightweight, and fast.
Vediamo prima con un esempio cos'è REST, partendo da un servizio free che rispetta l'architettura di un servizio REST, cioè permette di interrogare, avere risposte dal server tramite semplici chiamate HTTP a delle url che identificano in modo univoco le risorse.
Per fare le richieste è necessario avere un access token, che vi viene dato dal servizio quando vi autenticate.
Cliccate sul pulsante Login
in alto a destra
Selezionate il servizio si autenticazione (di terze parti):
Ora accedete il servizio vi ridirezione sulla pagina contenente l'Access Token che vi permette di sfruttare le API REST del servizio.
Tramite la Rest Console accedibile dal menù dei servizi è possibile eseguire le operazioni di creazione, update, cancellazione e listing delle risorse identificate dalle URI (Uniform Resource Identifier).
Le risorse dell'applicazione d'esempio che espone un API REST sono:
https://gorest.co.in/public/v2/users per gestire gli utenti;
https://gorest.co.in/public/v2/posts per gestire i post pubblicati;
https://gorest.co.in/public/v2/comments per gestire i commenti pubblicati;
https://gorest.co.in/public/v2/todos per gestire gli impegni;
Postman è un client per fare richieste a servizi REST, molto utilizzato per fare dei test a servizi che espongono API REST: richieste GET
, POST
, PUT
e DELETE
tramite una semplice interfaccia grafica.
Installate Postman scaricando il client o utilizzate la versione web del servizio.
Ora facciamo alcune richieste REST al servizio tramite Postman:
Richiesta elenco degli user - GET
https://gorest.co.in/public/v2/users
Creazione di un nuovo utente - POST
https://gorest.co.in/public/v2/users passando nel body della request i dati dell'utente
nella response:
viene ritornato un id
numerico che identifica in modo univoco l'utente creato. Lo status code della risposta è 201 Created
. N.B. Ricordarsi di settare l'header Authorization con la propria chiave altrimenti il servizio risponde con messaggio d'errore ("Authorization failed");
3. Eseguiamo la ricerca dell'elemento - GET
https://gorest.co.in/public/v2/users/{idUser} con ID dell'utente prima creato;
4. Eseguire la cancellazione - DELETE
https://gorest.co.in/public/v2/users/{idUser} con ID dell'utente prima creato (notate che lo status code della risposta è: 204 No Content
, invece se ripetiamo la richiesta o su una risorsa che non c'è, lo status code della risposta è: 404 Not Found
);
5. Ripetere l'operazione GET
dell'utente https://gorest.co.in/public/v2/users/{idUser} per verificare avvenuta cancellazione utente.
N.B: Ricordarsi di aggiungere nella richiesta per l'autorizzazione header HTTPAuthorization
con valore Bearer YOUR-ACCESS-TOKEN
, con valore del proprio ACCESS TOKEN:
Da vedere ad esempio sotto Guide esempi di chiamate Nested Routes:
Creazione di un'applicazione per gestire una ToDo list prendendo i todo da https://jsonplaceholder.typicode.com/
Task
Metodo
Body
Path
Creazione di un nuovo cliente
POST
JSON
/customers
Cancellazione di un cliente
DELETE
Niente
/customers/{id}
Ritorna un cliente specifico
GET
Niente
/customers/{id}
Ritorna tutti i clienti
GET
Niente
/customers
Modifica uno specifico cliente
PUT
JSON
/customers/{id}