НЕНАВИСТЬ
Гипермедиа как механизм состояния приложения ( HATEOAS ) является ограничением архитектурного стиля программного обеспечения REST , которое отличает его от других стилей сетевой архитектуры .
С помощью HATEOAS клиент взаимодействует с сетевым приложением, серверы приложений которого динамически предоставляют информацию через гипермедиа . Клиенту REST практически не требуется предварительных знаний о том, как взаимодействовать с приложением или сервером, помимо общего понимания гипермедиа.
Напротив, клиенты и серверы в общей архитектуре брокера объектных запросов (CORBA) взаимодействуют через фиксированный интерфейс, общий для которого используется документация, или язык описания интерфейса (IDL).
Ограничения, налагаемые HATEOAS, разделяют клиент и сервер. Это позволяет функциональности сервера развиваться независимо.
Этот термин был придуман в 2000 году Роем Филдингом в его докторской диссертации. [1]
Пример
[ редактировать ]Пользовательский агент отправляет HTTP-запрос к REST API через URL-адрес точки входа . Все последующие запросы, которые может сделать пользовательский агент, обнаруживаются внутри ответа на каждый запрос. Типы носителей, используемые для этих представлений, и отношения ссылок, которые они могут содержать, являются частью API. Клиент переходит через состояния приложения, выбирая ссылки внутри представления или манипулируя представлением другими способами, предоставляемыми его типом носителя. Таким образом, взаимодействие RESTful управляется гипермедиа, а не внешней информацией. [2]
Например, этот запрос GET извлекает ресурс учетной записи, запрашивая подробную информацию в представлении JSON: [3]
GET /accounts/12345 HTTP/1.1Host: bank.example.com
Ответ:
HTTP/1.1 200 OK{ "account": { "account_number": 12345, "balance": { "currency": "usd", "value": 100.00 }, "links": { "deposits": "/accounts/12345/deposits", "withdrawals": "/accounts/12345/withdrawals", "transfers": "/accounts/12345/transfers", "close-requests": "/accounts/12345/close-requests" } }}
Ответ содержит следующие возможные последующие ссылки: ОТПРАВИТЬ депозит, вывод средств, перевод или запрос на закрытие (чтобы закрыть счет).
Например, позже, после перерасхода средств на счете, будет другой набор доступных ссылок, поскольку счет перерасходован.
HTTP/1.1 200 OK{ "account": { "account_number": 12345, "balance": { "currency": "usd", "value": -25.00 }, "links": { "deposits": "/accounts/12345/deposits" } }}
Сейчас доступна только одна ссылка: внести больше денег (путем ПОСТинга на депозиты). В текущем состоянии другие ссылки недоступны. Отсюда и термин Engine of Application State . Возможные действия различаются в зависимости от состояния ресурса.
Клиенту не обязательно понимать каждый тип носителя и механизм связи, предлагаемый сервером. Способность понимать новые типы мультимедиа может быть приобретена во время выполнения с помощью « кода по требованию », предоставляемого клиенту сервером. [1]
Происхождение
[ редактировать ]Ограничение HATEOAS является важной частью функции «унифицированного интерфейса» REST, как это определено в Роя Филдинга . докторской диссертации [1] Филдинг подробно описал эту концепцию в своем блоге. [2]
Целью некоторой строгости этого и других ограничений REST, объясняет Филдинг, является «проектирование программного обеспечения в масштабе десятилетий: каждая деталь предназначена для обеспечения долговечности программного обеспечения и независимой эволюции. К сожалению, люди довольно хороши в краткосрочном проектировании и обычно ужасны в долгосрочном проектировании». [2]
Реализации
[ редактировать ]- HTML сам по себе является гипермедиа, с
<form>...</form>
элемент управления HTTP-запросами к ссылкам. [2] [4] - HAL — гипермедиа, построенная на основе JSON или XML. Определяет ссылки, но не действия (HTTP-запросы).
- JSON-LD , стандарт для гиперссылок в формате JSON. Не рассматривает действия.
- Siren — гипермедиа, построенная на основе JSON. Определяет ссылки и действия. [5]
- Collection+JSON — гипермедиа, построенная на основе JSON. Определяет ссылки и действия. [6]
- JSON:API определяет ссылки и действия. [7]
- Гидра . Создается на основе JSON-LD и добавляет определения действий. [8]
См. также
[ редактировать ]- Язык гипертекстовых приложений
- Обнаружение и интеграция универсального описания является эквивалентом языка описания веб-сервисов.
Ссылки
[ редактировать ]- ^ Перейти обратно: а б с Филдинг, Рой Томас (2000). «Передача представительского состояния (REST)» . Архитектурные стили и проектирование сетевых архитектур программного обеспечения (доктор философии). Калифорнийский университет в Ирвайне . п. 82. ИСБН 0599871180 .
- ^ Перейти обратно: а б с д Филдинг, Рой Т. (20 октября 2008 г.). «REST API должны управляться гипертекстом» . Проверено 20 мая 2010 г.
- ^ Тийссен, Джошуа (29 октября 2016 г.). «Что такое HATEOAS и почему это важно для моего REST API?» . Поваренная книга REST . Проверено 5 февраля 2020 г.
- ^ Гросс, Карсон. «ХАТЕОАС» . htmx.org .
И это несмотря на то, что ни XML, ни JSON не были такими же естественными гипермедиа, как HTML.
- ^ Сирена: спецификация гипермедиа для представления сущностей на GitHub.
- ^ «Коллекция+JSON — тип гипермедиа» . Проверено 25 октября 2021 г.
- ^ «JSON API: последняя спецификация» . Проверено 25 октября 2021 г.
- ^ «Hydra: веб-API, управляемые гипермедиа» . Проверено 27 октября 2021 г.