Jak obecnie rozumiem, HATEOAS polega w zasadzie na wysyłaniu razem z każdą odpowiedzią linków z informacjami o tym, co robić dalej. Jeden prosty przykład można łatwo znaleźć w Internecie: system bankowy wraz z zasobem konta. Przykład pokazuje tę odpowiedź po żądaniu GET do zasobu konta
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>
Wraz z danymi znajdują się linki informujące, co można zrobić dalej. Jeśli saldo jest ujemne, mamy
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>
Abyśmy mogli tylko dokonać wpłaty. Wszystko w porządku, jeśli korzystamy z Fiddlera lub wysyłamy zapytania za pomocą przeglądarki, możemy łatwo zobaczyć, co można zrobić. Tego rodzaju informacje są przydatne, abyśmy mogli odkryć możliwości API, a serwer jest oddzielony od klienta.
Chodzi jednak o to, że kiedy budujemy klienta, takiego jak SPA z Javascriptem, aplikacja na Androida lub wiele innych rzeczy, nie widzę, jak HATEOAS jest nadal aktualny. Chodzi mi o to: kiedy koduję SPA w javascript, muszę wiedzieć, co można zrobić w interfejsie API, aby napisać kod.
Muszę więc znać zasoby, obsługiwane metody, czego oczekują i co oddają, aby napisać wywołania ajax na serwerze, a nawet aby zbudować interfejs użytkownika. Kiedy tworzę interfejs użytkownika, muszę wiedzieć, że po złożeniu wniosku o konto można na przykład dokonać wpłaty na konto, w przeciwnym razie nie będę mógł podać tej opcji w interfejsie użytkownika. Potrzebuję też znać identyfikator URI, aby dokonać wpłaty w celu zbudowania wywołania ajax.
Mam na myśli to, że kiedy wysyłamy żądania do interfejsu API, łącza pozwalają nam lepiej odkrywać interfejs API i korzystać z niego, ale kiedy budujemy klienta, tworzona przez nas aplikacja nie będzie po prostu patrzeć na łącza, a następnie sama renderować poprawny interfejs użytkownika i wykonaj prawidłowe wywołania ajax.
Jak więc HATEOAS jest ważny dla klientów? Dlaczego w ogóle zawracamy sobie głowę HATEOAS?