Comunicazione Stateless

La principale caratteristica offerta dal protocollo HTTP è rappresentata dall’indipendenza delle singole richieste effettuate, in altre parole: ogni richiesta non ha alcuna relazione con quella che la segue o che la precede. Il medesimo principio si applica ad un Web Service RESTful, ogni interazione tra client e server è del tutto indipendente dalla precedente.

Questo non significa che i servizi REST non prevedano l’utilizzo dello stato. La responsabilità della gestione dello stato dell’applicazione non deve essere conferita al server, ma rientra tra i compiti del client.

La principale ragione di questa scelta è la scalabilità: mantenere lo stato di una sessione ha un costo in termini di risorse sul server. All’aumentare del numero di client tale costo può diventare insostenibile. Inoltre, con una comunicazione senza stato è possibile creare cluster di server che possono rispondere ai client senza vincoli sulla sessione corrente, ottimizzando le prestazioni globali dell’applicazione.

Le comunicazione REST sono quindi senza stato?

L’acronimo REST, come abbiamo già visto in precedenza, denota l’espressione “REpresentational State Transfer”, la quale sottolinea la centralità della gestione dello stato all’interno dell’architettura.

All’interno di un contesto REST concorrono differenti stati:

  • Stato dalle risorsa, composto dall’insieme dei valori che costituiscono una risorsa in un dato momento. Tale stato viene gestito dal Web Service, il quale è responsabile della sua esposizione al client;
  • Stato del client, composto dall’insieme del contesto e delle risorse ottenute dal server in uno specifico momento;
  • Stato dell’applicazione, il risultato dell’interazione tra client e server, è dato dallo stato del client e delle risorse gestite dal server.

A differenza di quanto avviene all’interno di molte applicazioni Web, dove lo stato dell’applicazione viene gestito e mantenuto dal server, all’interno di una architettura RESTful lo stato è il risultato della collaborazione di client e server, ciascuno con i propri ruoli e responsabilità.