Come capisco attualmente, HATEOAS si basa essenzialmente sull'invio insieme a ciascun link di risposta con informazioni su cosa fare dopo. Un semplice esempio è facilmente reperibile su Internet: un sistema bancario insieme a una risorsa di conto. L'esempio mostra questa risposta dopo una richiesta GET a una risorsa dell'account
GET /account/12345 HTTP/1.1 HTTP/1.1 200 OK
<?xml version="1.0"?>
<account>
<account_number>12345</account_number>
<balance currency="usd">100.00</balance>
<link rel="deposit" href="/account/12345/deposit" />
<link rel="withdraw" href="/account/12345/withdraw" />
<link rel="transfer" href="/account/12345/transfer" />
<link rel="close" href="/account/12345/close" />
</account>
Insieme ai dati ci sono collegamenti che dicono cosa si può fare dopo. Se il saldo è negativo, abbiamo
GET /account/12345 HTTP/1.1 HTTP/1.1 200 OK
<?xml version="1.0"?>
<account>
<account_number>12345</account_number>
<balance currency="usd">-25.00</balance>
<link rel="deposit" href="/account/12345/deposit" />
</account>
In modo che possiamo solo depositare. Va bene, se stiamo usando Fiddler o stiamo facendo richieste con il browser possiamo facilmente vedere cosa si può fare. Questo tipo di informazioni è utile per noi per scoprire le capacità dell'API e il server viene disaccoppiato dal client.
Il punto, tuttavia, è che quando costruiamo un client, come una SPA con Javascript, o un'app Android o molte altre cose, non riesco a vedere come HATEOAS continui ad essere rilevante. Quello che intendo è il seguente: quando sto codificando la SPA in javascript, devo sapere cosa si può fare nell'API per scrivere il codice.
Quindi ho bisogno di conoscere le risorse, i metodi supportati, cosa si aspettano di ricevere e cosa restituiscono per poter scrivere le chiamate Ajax sul server e persino per costruire l'interfaccia utente. Quando creo l'interfaccia utente, devo sapere che dopo aver richiesto l'account, ad esempio, si può depositare in esso o non sarò in grado di fornire questa opzione sull'interfaccia utente. Inoltre, dovrò conoscere l'URI per effettuare il deposito per creare la chiamata ajax.
Quello che voglio dire è che quando facciamo richieste all'API, i collegamenti ci permettono di scoprire e usare meglio l'API, ma quando costruiamo un client, l'app che stiamo costruendo non guarderà semplicemente i collegamenti e quindi renderà da soli l'interfaccia utente corretta ed effettua le giuste chiamate ajax.
Quindi, quanto è importante HATEOAS per i clienti? Perché ci preoccupiamo comunque di HATEOAS?