Como entiendo actualmente, HATEOAS se trata básicamente de enviar junto con cada respuesta enlaces con información sobre qué hacer a continuación. Un ejemplo simple se encuentra fácilmente en Internet: un sistema bancario junto con un recurso de cuenta. El ejemplo muestra esta respuesta después de una solicitud GET a un recurso de cuenta
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>
Junto con los datos, hay enlaces que indican qué se puede hacer a continuación. Si el saldo es negativo tenemos
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 solo podamos depositar. Eso está bien, si estamos usando Fiddler o haciendo solicitudes con el navegador, podemos ver fácilmente qué se puede hacer. Este tipo de información es útil para que descubramos las capacidades de la API y el servidor se desacople del cliente.
El punto, sin embargo, es que cuando creamos un cliente, como un SPA con Javascript, o una aplicación de Android o muchas otras cosas, no puedo ver cómo HATEOAS sigue siendo relevante. Lo que quiero decir es lo siguiente: cuando estoy codificando el SPA en JavaScript, debo saber qué se puede hacer en la API para escribir el código.
Por lo tanto, necesito conocer los recursos, los métodos admitidos, lo que esperan recibir y lo que devuelven para escribir las llamadas ajax en el servidor e incluso para construir la interfaz de usuario. Cuando construyo la IU, debo saber que después de solicitar la cuenta, uno puede, por ejemplo, depositar en ella, o no podré proporcionar esta opción en la IU. Además, necesitaré conocer el URI para hacer el depósito para construir la llamada ajax.
Lo que quiero decir es que, cuando hacemos solicitudes a la API, los enlaces nos permiten descubrir y usar la API mejor, pero cuando creamos un cliente, la aplicación que estamos construyendo no solo mirará los enlaces y luego se renderizará la interfaz de usuario correcta y hacer las llamadas correctas ajax.
Entonces, ¿cómo es importante HATEOAS para los clientes? ¿Por qué nos molestamos con HATEOAS de todos modos?