Come attualmente capisco, HATEOAS è fondamentalmente basato sull'invio di ogni link di risposta con informazioni su cosa fare dopo. Un semplice esempio è facilmente reperibile su Internet: un sistema bancario insieme a una risorsa account. L'esempio mostra questa risposta dopo una richiesta GET a una risorsa 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 depositare solo. Va bene, se stiamo usando Fiddler o facciamo richieste con il browser, possiamo facilmente vedere cosa si può fare. Questo tipo di informazioni è utile quindi per noi per scoprire le capacità dell'API e il server è disaccoppiato dal client.
Il punto, tuttavia, è che quando costruiamo un client, come una SPA con Javascript, o un'app per Android o molte altre cose, non vedo 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 scrivere le chiamate ajax al server e anche per costruire l'interfaccia utente. Quando creo l'interfaccia utente, devo sapere che, dopo aver richiesto l'account, è possibile, ad esempio, effettuare un deposito in esso oppure non sarei in grado di fornire questa opzione nell'interfaccia utente. Inoltre, dovrò conoscere l'URI per effettuare il deposito per costruire la chiamata ajax.
Quello che voglio dire è che quando facciamo richieste all'API, i collegamenti ci permettono di scoprire e utilizzare meglio l'API, ma quando costruiamo un client, l'app che stiamo costruendo non guarderà semplicemente i link e quindi di per sé rende l'interfaccia utente corretta e fa le giuste chiamate ajax.
Quindi, com'è HATEOAS importante per i clienti? Perché ci preoccupiamo comunque di HATEOAS?