私が現在理解しているように、HATEOASは基本的に、次に何をすべきかについての情報を各応答リンクと共に送信することに関するものです。簡単な例の1つは、インターネット上で簡単に見つかります:銀行システムとアカウントリソース。この例は、アカウントリソースへの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の機能を発見するのに役立ち、サーバーはクライアントから切り離されます。
ただし、ポイントは、Javascriptを使用したSPAやAndroidアプリなど、クライアントを構築するときに、HATEOASがどのように関連し続けるかを見ることができないということです。つまり、SPAをJavaScriptでコーディングしている場合、コードを記述するためにAPIで何ができるかを知る必要があります。
そのため、サーバーにajax呼び出しを記述し、さらにはUIを構築するために、リソース、サポートされるメソッド、受信するもの、返すものを知る必要があります。UIを構築するとき、アカウントをリクエストした後、たとえば、アカウントにデポジットすることができます。そうしないと、UIでこのオプションを提供できません。また、Ajax呼び出しを構築するためのデポジットを行うには、URIを知る必要があります。
つまり、APIにリクエストを行うと、リンクによってAPIの検出と使用が改善されますが、クライアントを作成すると、作成するアプリは単にリンクを見てからそれ自体をレンダリングしません正しいUIを作成し、適切なAjax呼び出しを行います。
それでは、クライアントにとってHATEOASはどのように重要ですか?とにかくHATEOASに悩まされるのはなぜですか?