sabato 11 settembre 2021

Appunti su REST

 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 :

  1. client(consumatore del servizio) e server(fornitore del servizio) devono ignorare reciprocamente le logiche di funzionamento interne

  2. il servizio deve essere stateless

  3. 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)

  4. ogni risorsa deve essere univoca

  5. 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.


Crittografia e WCF per passare una password ( od una qualsiasi altra stringa (xml,json, etc.etc.) ) da un applicazione ad un' altra in sicurezza

 Il codice che segue è da considerarsi in alpha e da non utilizzare in un ambiente di produzione , qui potete trovare il  "progetto...