Гипермедиа как механизм состояния приложения ( HATEOAS ) - это компонент архитектуры приложения REST, который отличает его от других архитектур сетевых приложений.
С HATEOAS клиент взаимодействует с сетевым приложением, серверы приложений которого динамически предоставляют информацию через гипермедиа . Клиенту REST практически не нужны предварительные знания о том, как взаимодействовать с приложением или сервером, помимо общего понимания гипермедиа.
Напротив, клиенты и серверы в CORBA взаимодействуют через фиксированный интерфейс, совместно используемый посредством документации или языка описания интерфейса (IDL).
Ограничения, накладываемые HATEOAS, разделяют клиент и сервер. Это позволяет функциональным возможностям сервера развиваться независимо.
Пример [ править ]
Клиент REST входит в приложение REST через простой фиксированный URL-адрес . Все будущие действия, которые может предпринять клиент, обнаруживаются в представлениях ресурсов, возвращаемых сервером. Эти типы носителей , используемые для этих представлений, а также ссылка отношение они могут содержать, стандартизированы. Клиент переходит через состояния приложения, выбирая из ссылок в представлении или манипулируя представлением другими способами, предусмотренными его типом мультимедиа. Таким образом, взаимодействие RESTful осуществляется гипермедиа, а не внеполосной информацией. [1]
Например, этот запрос GET извлекает ресурс учетной записи, запрашивая подробности в представлении JSON: [2]
GET / accounts / 12345 HTTP / 1.1 Хост : bank.example.com Принять : application / vnd.acme.account + json ...
Ответ такой:
HTTP / 1.1 200 OK Content-Type : application / vnd.acme.account + json Content-Length : ...{ "account" : { "account_number" : 12345 , "balance" : { "currency" : "usd" , "value" : 100.00 }, "links" : { "deposit" : "/ accounts / 12345 / deposit" , «снять» : «/ счет / 12345 / снять» , «передать» : «/ счет / 12345 / перевод» , «закрыть» : «/ счет / 12345 / закрыть» } } }
Ответ содержит следующие возможные дополнительные ссылки: внесите депозит, снятие средств или перевод, или закройте счет.
Когда информация об учетной записи будет получена позже, счет будет превышен:
HTTP / 1.1 200 OK Content-Type : application / vnd.acme.account + json Content-Length : ...{ "account" : { "account_number" : 12345 , "balance" : { "currency" : "usd" , "value" : -25.00 }, "links" : { "deposit" : "/ accounts / 12345 / deposit" } } }
Теперь доступна только одна ссылка: внести больше денег. В текущем состоянии другие ссылки недоступны. Отсюда и термин « Двигатель состояния приложения» . Возможные действия зависят от состояния ресурса.
Клиенту не нужно понимать все типы носителей и механизмы связи, предлагаемые сервером. Способность понимать новые типы мультимедиа может быть приобретена во время выполнения с помощью « кода по запросу », предоставляемого клиенту сервером. [3]
Истоки [ править ]
Ограничение HATEOAS является неотъемлемой частью функции «унифицированного интерфейса» REST, как это определено в докторской диссертации Роя Филдинга . [3] Филдинг далее описал эту концепцию в своем блоге. [1]
Филдинг объясняет, что цель некоторой строгости этого и других ограничений REST заключается в том, чтобы «проектировать программное обеспечение в масштабе десятилетий: каждая деталь предназначена для обеспечения долговечности программного обеспечения и независимой эволюции. Многие из ограничений прямо противоположны краткосрочным. эффективность. К сожалению, люди довольно хорошо разбираются в краткосрочном дизайне и обычно плохо в долгосрочном дизайне ». [1]
См. Также [ править ]
- Язык приложения гипертекста
- Обнаружение и интеграция универсального описания является эквивалентом языка описания веб-служб.
Ссылки [ править ]
- ^ a b c Филдинг, Рой Т. (20 октября 2008 г.). «API-интерфейсы REST должны управляться гипертекстом» . Проверено 20 мая 2010 года .
- ^ Thijssen, Джошуа (2016-10-29). «Что такое HATEOAS и почему он важен для моего REST API?» . REST CookBook . Проверено 5 февраля 2020 .
- ^ a b Филдинг, Рой Томас (2000). «Репрезентативная передача состояния (REST)» . Архитектурные стили и проектирование сетевых архитектур программного обеспечения (PhD). Калифорнийский университет в Ирвине .