HATEOAS - HATEOAS

Гипермедиа как двигатель состояния приложения (HATEOAS) является составной частью Архитектура приложения REST это отличает его от других архитектур сетевых приложений.

С HATEOAS клиент взаимодействует с сетевым приложением, серверы приложений которого динамически предоставляют информацию через гипермедиа. Клиенту REST практически не нужны предварительные знания о том, как взаимодействовать с приложением или сервером, помимо общего понимания гипермедиа.

Напротив, клиенты и серверы в CORBA взаимодействовать через фиксированный интерфейс опубликовано через документацию или язык описания интерфейса (IDL).

Ограничения, накладываемые HATEOAS, разделяют клиент и сервер. Это позволяет функциональным возможностям сервера развиваться независимо.

Пример

Клиент REST входит в приложение REST через простой фиксированный URL. Все будущие действия, которые может предпринять клиент, обнаруживаются в ресурс представления, возвращенные с сервера. В типы медиа используется для этих представлений, а связать отношения они могут содержать, стандартизированы. Клиент переходит через состояния приложения, выбирая из ссылок внутри представления или манипулируя представлением другими способами, предусмотренными его типом мультимедиа. Таким образом, взаимодействие RESTful осуществляется гипермедиа, а не внеполосной информацией.[1]

Например, этот запрос GET извлекает ресурс учетной записи, запрашивая подробности в представлении JSON:[2]

ПОЛУЧАТЬ / accounts / 12345 HTTP/1.1Хозяин: bank.example.comПринимать: приложение / vnd.acme.account + json...

Ответ такой:

HTTP/1.1 200 OkТип содержимого: приложение / vnd.acme.account + jsonContent-Length: ...{    "учетная запись": {        "номер счета": 12345,        "баланс": {            "валюта": "доллар США",            "ценить": 100.00        },        "ссылки": {            "депозит": "/ accounts / 12345 / deposit",            "снять со счета": "/ accounts / 12345 / вывести",            "передача": "/ accounts / 12345 / transfer",            "Закрыть": "/ accounts / 12345 / close"        }    }}

Ответ содержит следующие возможные дополнительные ссылки: внести депозит, снять или перевести, или закрыть счет.

Когда информация об учетной записи будет получена позже, счет будет превышен:

HTTP/1.1 200 OkТип содержимого: приложение / vnd.acme.account + jsonContent-Length: ...{    "учетная запись": {        "номер счета": 12345,        "баланс": {            "валюта": "доллар США",            "ценить": -25.00        },        "ссылки": {            "депозит": "/ accounts / 12345 / deposit"        }    }}

Теперь доступна только одна ссылка: внести больше денег. В нынешнем государственный, остальные ссылки недоступны. Отсюда термин Двигатель состояния приложения. Какие действия возможны, зависит от состояния ресурса.

Клиенту не нужно понимать все типы носителей и механизмы связи, предлагаемые сервером. Способность понимать новые типы мультимедиа может быть приобретена во время выполнения через "код по запросу "предоставляется клиенту сервером.[3]

Происхождение

Ограничение HATEOAS является неотъемлемой частью функции "унифицированного интерфейса" REST, как определено в Рой Филдинг докторская диссертация.[3] Филдинг далее описал концепцию в своем блоге.[1]

Филдинг объясняет, что цель некоторой строгости этого и других ограничений REST заключается в том, чтобы «проектировать программное обеспечение в масштабе десятилетий: каждая деталь предназначена для обеспечения долговечности программного обеспечения и независимой эволюции. Многие из ограничений прямо противоположны краткосрочным. эффективность. К сожалению, люди довольно хорошо разбираются в краткосрочном дизайне и обычно плохо разбираются в долгосрочном дизайне ».[1]

Смотрите также

Рекомендации

  1. ^ а б c Филдинг, Рой Т. (20 октября 2008 г.). «API REST должны быть гипертекстовыми». Получено 20 мая 2010.
  2. ^ Тейссен, Джошуа (2016-10-29). «Что такое HATEOAS и почему он важен для моего REST API?». Поваренная книга REST. Получено 2020-02-05.
  3. ^ а б Филдинг, Рой Томас (2000). «Репрезентативная передача состояния (REST)». Архитектурные стили и проектирование сетевых архитектур программного обеспечения (Кандидат наук). Калифорнийский университет в Ирвине.