Rest(Representational State Transfer) è uno stile architetturale per i sistemi distribuiti ,esso non definisce né il formato della risposta ( ad esempio Json) nè il protocollo utilizzato. REST può essere applicato sia ad un URI sia al protocollo HTTP ,a tal proposito si può vedere il capitolo 6 della dissertazione di Roy Thomas Fielding : https://www.ics.uci.edu/~fielding/pubs/dissertation/fielding_dissertation.pdf .
REST può essere definito attraverso l'esplicitazione di alcuni principi che ne modellano il funzionamento :
client(consumatore del servizio) e server(fornitore del servizio) devono ignorare reciprocamente le logiche di funzionamento interne
il servizio deve essere stateless
cache: per migliorare il funzionamento del network è necessario che la response ad una request del client sia implicitamente marcata come cacheable o no cacheable ( vedi pag. 79 del testo sopracitato di Fielding)
ogni risorsa deve essere univoca
le risposte devono contenere le informazioni necessarie a fare il discovery ed ad informare il client su come utilizzare altre risorse , a tal fine la risposta contiene degli hypermedia (HATEOAS (Hypermedia as the Engine of Application State) , https://en.wikipedia.org/wiki/HATEOAS)
Per valutare quanto un API sia conforme ai principi REST si può utilizzare il Richardson Maturity Model (RMM , https://en.wikipedia.org/wiki/Richardson_Maturity_Model , https://martinfowler.com/articles/richardsonMaturityModel.html) ,l'RMM prevede quattro livelli ,dal meno conforme a REST (0) al più aderente(3) :
livello 0 : viene usato lo stesso endpoint per fare tutte le chiamate sul server
livello 1 : vengono resi disponibili endpoint differenti per risorse differenti ,ad esempio :
Uri Operations
/bookingDestinations retrieve
/bookingReservations add/cancel reservations
livello 2 : in questo caso si utilizzano i verbi http per chiamare risorse differenti quindi non si crea un endpoint “getreservations” ma si utilizza il verbo http “get” sull'indirizzo “reservations”, ad esempio :
URI HttpVerb Operation
/reservations GET get reservations
/reservations POST add reservation
livello 3 : HATEOAS , ogni risposta contiene anche come svolgere altre azioni relative all'elemento in questione ,ad esempio se creiamo un Cliente ci potranno essere restituite nella risposta dal server anche le informazioni necessarie per visualizzarlo ed altre informazioni tramite hypermedia (https://en.wikipedia.org/wiki/HATEOAS)
L'argomento può essere approfondito tramite l'opera sopracitata di Roy Thomas Fielding.