Ограничение гипермедиа (ранее известное как HATEOAS) - это ограничение, которое используется для предоставления руководства агенту пользователя.
Включая ссылки в возвращаемые представления, сервер может снять нагрузку с пользователя.агент определяет, какие действия могут быть предприняты на основе текущего состояния приложения и знает, с кем следует взаимодействовать для достижения этой цели.
Поскольку сервер не знает о пользователе,Текущее состояние агента, отличное от того, что он получает в запросе, важно, чтобы пользовательский агент старался избегать использования состояния, отличного от представлений, возвращаемых с сервера.Это гарантирует, что доступные действия, предоставляемые сервером, основаны на наиболее полном понимании состояния агента пользователя.
Агент пользователя, соответствующий ограничению Hypermedia, действует как конечный автомат, где переходы состояний вызваны следующими ссылками , доступными в текущем представлении.Возвращенное представление становится новым состоянием.
Преимуществами такого подхода может быть очень легкий пользовательский агент .Для управления состоянием требуется очень мало кода, поскольку его действия должны основываться исключительно на полученном ответе и ссылке, которая получила этот ответ.Код пользовательского агента становится декларативным и реагирующим, а не обязательным последовательностью GET, затем делайте это и затем делайте это, у вас просто есть механизм для перехода по ссылкам, и во многих случаях КОГДА вы получаете это, ТОГДА это делаете.
Для примера того, как это работает, вам не нужно смотреть дальше своего веб-браузера и веб-сайта, который не использует Javascript.Браузер предоставляет вам варианты, основанные на ссылках в HTML.Когда вы переходите по этой ссылке, браузер заменяет свое текущее состояние новым состоянием, полученным при переходе по ссылке.Кнопка «Назад» работает (или, по крайней мере, должна), потому что вы извлекаете состояние из ссылки в своей истории.Браузер не должен заботиться о том, как вы попали на страницу, поскольку состояние должно полностью основываться на извлеченном представлении.
Эта модель "управления состоянием" может быть очень ограничивающей , так как ваш текущийСостояние приложения основано на ответе одного сервера.Однако сложные приложения можно создавать с помощью набора пользовательских агентов, работающих вместе .Это часть достижения AJAX в том, что он позволяет использовать отдельный пользовательский агент для выполнения отдельных запросов и, следовательно, фактически управлять другим конечным автоматом.К сожалению, большую часть времени люди возвращаются к стилю RPC, когда начинают делать запросы javascript, что, к сожалению, с учетом естественной асинхронности Javascript.