I servizi rest (Representational State Transfer) sono servizi offerti tramite semplici chiamate web che usano il protocollo http, quindi non soap o altri protocolli dedicati, caratterizzati dal fatto che, invece di invocare pagine HTML, invocano funzioni, es.:
http://example.com/user.php?action=isActive&id=36
Nel mondo REST una pagina è una funzione o collezione di funzioni che agiscono su una stessa risorsa, o eventualmente un punto di accesso a un insieme di funzioni generiche.
REST non è uno standard ma piuttosto un approccio, infatti esistono vari approcci REST a seconda di come si organizzano le varie parti di informazione, ad esempio alcuni (ma ce ne sono altri) possono essere:
http://example.com/user/isActive.php?id=36
Il tipo di oggetto presentato come directory, l’azione nel nome pagina, i dettagli nei parametri
http://example.com/user.php?action=isActive&id=36
Il tipo di oggetto come pagina, l’azione e i dettagli come parametri
http://example.com/rest.php?obj=user&action=isActive&id=36
Tipo di oggetto, azione e dettagli come parametri
http://example.com/user/36?action=isActive
Il tipo di oggetto come directory, l’id della risorsa come
pagina, l’azione nei parametri;
in questo caso spesso si si devono rimappare gli id dell’url da
nome pagina a parametro di una pagina nascosta, ad esempio su
apache tramite htaccess
Altri approcci prevedono l’uso del campo “metodo” del protocollo HTTP per specificare l’azione da eseguire, es. GET, PUT, ecc..
Questo approccio ha alcuni svantaggi:
Dunque personalmente lo sconsiglio e non lo uso.
L’approccio REST è pensato per il mondo web dove la connessione avviene con tempi di comunicazione variabili (qualche frazione di secondo come diversi minuti) e a volte può interrompersi. Per questo motivo i servizi REST richiedono di essere atomici, ovvero quando tra più chiamate REST e la comunicazione si interrompe o si prolunga il sistema deve mantenersi coerente e mai presentarsi in uno stato “a metà”.
Per implementare questa atomicità i servizi REST sono spesso implementati con approccio CRUD (come i database transazionali), ovvero le interazioni REST si raggruppano in 4 famiglie di azioni base che possono essere rese atomiche: Create, Read, Update e Delete.
Con questo approccio si supera il problema della discontinuità di rete, garantendo che il sistema resti coerente supportando interazioni discontinue e prolungate.