Si je comprends bien, HATEOAS consiste essentiellement à envoyer avec chaque réponse des liens contenant des informations sur la prochaine étape. Un exemple simple se trouve facilement sur Internet: un système bancaire associé à une ressource de compte. L'exemple montre cette réponse après une requête GET à une ressource de compte
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>
Avec les données, des liens indiquent ce qui peut être fait ensuite. Si le solde est négatif, nous avons
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>
Pour que nous ne puissions que déposer. Tout va bien, si nous utilisons Fiddler ou si nous effectuons des requêtes avec le navigateur, nous pouvons facilement voir ce qui peut être fait. Ce type d’information nous est utile pour découvrir les capacités de l’API et le serveur est découplé du client.
Le problème, toutefois, est que lorsque nous construisons un client, comme un SPA avec Javascript, une application Android ou bien d’autres choses, je ne vois pas en quoi HATEOAS continue d’être pertinent. Ce que je veux dire, c’est ce qui suit: lorsque je code le SPA en javascript, je dois savoir ce qui peut être fait dans l’API pour écrire le code.
J'ai donc besoin de connaître les ressources, les méthodes prises en charge, ce qu'ils s'attendent de recevoir et ce qu'ils rendent pour pouvoir écrire les appels ajax sur le serveur et même pour construire l'interface utilisateur. Lorsque je construis l'interface utilisateur, je dois savoir qu'après avoir demandé le compte, on peut par exemple y déposer, sinon je ne pourrai pas fournir cette option sur l'interface utilisateur. De plus, je devrai connaître l'URI pour effectuer le dépôt afin de construire l'appel ajax.
Ce que je veux dire, c’est que, lorsque nous faisons des demandes à l’API, les liens nous permettent de mieux les découvrir et de les utiliser, mais lorsque nous construisons un client, l’application que nous construisons ne se contente pas de regarder les liens, puis de se rendre la bonne interface utilisateur et faire les bons appels ajax.
Alors, en quoi HATEOAS est-il important pour les clients? Pourquoi nous ennuyons-nous avec HATEOAS de toute façon?