Não compreendo o benefício do HATEOAS para APIs destinadas ao uso por programas (em oposição a seres humanos que navegam diretamente na API). Claro, o cliente não está vinculado a um esquema de URL, mas a um esquema de dados que é a mesma coisa em minha mente.
Por exemplo, suponha que eu queira visualizar um item em um pedido, suponha que eu já tenha descoberto ou saiba o URL do pedido.
HATEOAS:
order = get(orderURL);
item = get(order.itemURL[5]);
não HATEOAS:
order = get(orderURL);
item = get(getItemURL(order,5));
No primeiro modelo, eu tenho que saber o fato de que o objeto order possui um campo itemURL. No segundo modelo, eu tenho que saber como construir uma URL de item. Nos dois casos, tenho que "saber" alguma coisa com antecedência, então o que a HATEOAS está realmente fazendo por mim?
get(orderURL);
deveria estar lhe dizendothe fact that the order object has an itemURL field
.