Я не понимаю преимущества HATEOAS для API, предназначенных для использования программами (в отличие от людей, непосредственно просматривающих ваш API). Конечно, клиент не привязан к схеме URL, но он привязан к схеме данных, что на мой взгляд одно и то же.
Например, предположим, что я хочу просмотреть элемент в заказе, предположим, что я обнаружил или уже знаю URL заказа.
HATEOAS:
order = get(orderURL);
item = get(order.itemURL[5]);
без HATEOAS:
order = get(orderURL);
item = get(getItemURL(order,5));
В первой модели я должен знать тот факт, что объект заказа имеет поле itemURL. Во второй модели я должен знать, как создать URL элемента. В обоих случаях я должен что-то заранее знать, так что же на самом деле делает для меня HATEOAS?
get(orderURL);
должен сказать вамthe fact that the order object has an itemURL field
.