Как я сейчас понимаю, 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?