Никто в сообществе REST не говорит, что REST - это просто. HATEOAS - лишь один из аспектов, который добавляет сложности архитектуре REST.
Люди не делают HATEOAS по всем причинам, которые вы предлагаете: это сложно. Это добавляет сложности как на стороне сервера, так и на стороне клиента (если вы действительно хотите извлечь из этого выгоду).
ОДНАКО миллиарды людей пользуются преимуществами REST сегодня. Вы знаете, что такое URL-адрес "кассы" на Amazon? Я не. Тем не менее, я могу оформлять заказ каждый день. Этот URL изменился? Я не знаю, мне все равно.
Вы знаете, все равно? Любой, кто написал скрин, очистил автоматизированный клиент Amazon. Кто-то, кто, вероятно, тщательно анализировал веб-трафик, читал HTML-страницы и т. Д., Чтобы узнать, какие ссылки вызывать, когда и с какой полезной нагрузкой.
И как только Amazon изменил свои внутренние процессы и структуру URL-адресов, эти жестко запрограммированные клиенты перестали работать - потому что ссылки оборвались.
Тем не менее, обычные пользователи сети могли делать покупки в течение всего дня без каких-либо проблем.
Это REST в действии, он просто дополнен человеческим существом, которое может интерпретировать и интуитивно понимать текстовый интерфейс, распознавать небольшое изображение с тележкой для покупок и выяснять, что это на самом деле означает.
Большинство людей, пишущих программы, этого не делают. Большинство людей, пишущих автоматических клиентов, не заботятся. Большинству людей легче исправить своих клиентов, когда они ломаются, чем спроектировать приложение, чтобы оно вообще не ломалось. У большинства людей просто не хватает клиентов там, где это важно.
Если вы пишете внутренний API для связи между двумя системами с опытной технической поддержкой и ИТ-специалистами по обе стороны трафика, которые могут быстро, надежно и с графиком изменений сообщать об изменениях, то REST ничего вам не купит. Вам это не нужно, ваше приложение недостаточно велико, и оно недостаточно долгое, чтобы иметь значение.
У крупных сайтов с большой базой пользователей есть эта проблема. Они не могут просто попросить людей изменить их клиентский код по прихоти при взаимодействии с их системами. График разработки серверов не совпадает с графиком разработки клиента. Резкие изменения API просто неприемлемы для всех участников, так как они нарушают трафик и работу с обеих сторон.
Таким образом, такая операция, скорее всего, выиграет от HATEOAS, так как ее легче версировать, легче переносить старые клиенты, проще обеспечить обратную совместимость, чем нет.
Клиент, который делегирует большую часть своего рабочего процесса серверу и действует в соответствии с результатами, гораздо более устойчив к изменениям сервера, чем клиент, который этого не делает.
Но большинству людей такая гибкость не нужна. Пишут серверный код для 2 или 3 отделов, это все для внутреннего использования. Если он сломается, они его исправят, и они учли это в своей обычной работе.
Гибкость, будь то REST или что-то еще, порождает сложность. Если вы хотите, чтобы это было просто и быстро, вы не делаете его гибким, вы просто делаете это и готово. По мере того, как вы добавляете абстракции и разыменование к системам, все становится сложнее, больше шаблонов, больше кода для тестирования.
Большая часть REST терпит неудачу из-за того, что "он вам не понадобится". Пока, конечно, не поймешь.
Если он вам нужен, то используйте его, и используйте его так, как написано. REST не пересылает информацию по HTTP. Этого никогда не было, это гораздо более высокий уровень, чем этот.
Но когда вам действительно нужен REST, и вы действительно используете REST, тогда HATEOAS является необходимостью. Это часть пакета и ключ к тому, что вообще заставляет его работать.