Atualmente, como eu entendo, o HATEOAS é basicamente o envio de cada link de resposta com informações sobre o que fazer em seguida. Um exemplo simples é facilmente encontrado na internet: um sistema bancário juntamente com um recurso da conta. O exemplo mostra esta resposta após uma solicitação GET para um recurso de conta
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>
Juntamente com os dados, existem links informando o que pode ser feito a seguir. Se o saldo for negativo, temos
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>
Para que possamos apenas depositar. Tudo bem, se estamos usando o Fiddler ou fazendo solicitações com o navegador, podemos ver facilmente o que pode ser feito. Esse tipo de informação é útil para descobrirmos os recursos da API e o servidor é dissociado do cliente.
O ponto, no entanto, é que, quando construímos um cliente, como um SPA com Javascript, um aplicativo Android ou muitas outras coisas, não consigo ver como o HATEOAS continua sendo relevante. O que quero dizer é o seguinte: quando estou codificando o SPA em javascript, preciso saber o que pode ser feito na API para escrever o código.
Então, eu preciso conhecer os recursos, os métodos suportados, o que eles esperam receber e o que devolvem para gravar as chamadas ajax no servidor e até para criar a interface do usuário. Quando crio a interface do usuário, devo saber que, depois de solicitar a conta, é possível, por exemplo, depositar nela, ou não poderei fornecer essa opção na interface do usuário. Além disso, precisarei conhecer o URI para fazer o depósito e criar a chamada ajax.
O que quero dizer é que, quando fazemos solicitações para a API, os links permitem descobrir e usar melhor a API, mas quando construímos um cliente, o aplicativo que estamos construindo não olha apenas para os links e depois renderiza sozinho a interface do usuário correta e faça as chamadas ajax corretas.
Então, como a HATEOAS é importante para os clientes? Por que nos incomodamos com o HATEOAS?