Як я зараз розумію, HATEOAS - це все, що стосується надсилання разом із кожним посиланням відповіді з інформацією про те, що робити далі. В Інтернеті легко знайти один простий приклад: банківська система разом із ресурсом рахунку. Приклад показує цю відповідь після запиту GET на ресурс облікового запису
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>
Разом із даними є посилання, що розповідають, що можна зробити далі. Якщо баланс негативний, ми маємо
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>
Так що ми можемо лише здати на зберігання. Це все добре, якщо ми використовуємо Fiddler або робимо запити за допомогою браузера, ми можемо легко побачити, що можна зробити. Така інформація є корисною для того, щоб ми розкрили можливості API і сервер був від'єднаний від клієнта.
Суть, однак, полягає в тому, що коли ми створюємо клієнта, наприклад, SPA з Javascript або додатком для Android або багатьох інших речей, я не можу побачити, як HATEOAS продовжує бути актуальним. Я маю на увазі таке: коли я кодую SPA в javascript, я повинен знати, що можна зробити в API, щоб написати код.
Тому мені потрібно знати ресурси, підтримувані методи, що вони очікують отримати і що вони повернуть для того, щоб писати дзвінки ajax на сервер і навіть для того, щоб створити інтерфейс користувача. Коли я будую інтерфейс користувача, я повинен знати, що після запиту рахунку можна, наприклад, внести його в депозит, або я не зможу надати цю опцію в інтерфейсі. Крім того, мені потрібно знати URI, щоб зробити депозит для створення дзвінка ajax.
Що я маю на увазі, коли ми робимо запити до API, посилання дійсно дозволяють нам виявити та використовувати API краще, але коли ми будуємо клієнт, додаток, який ми будуємо, не буде просто дивитись на посилання, а потім сам по собі видавати правильний інтерфейс користувача та здійснювати правильні дзвінки ajax.
Отже, наскільки HATEOAS важливий для клієнтів? Чому ми взагалі турбуємось з HATEOAS?