Этнос
- 1 year ago
- 0
- 0
HATEOAS ( H ypermedia a s t he E ngine o f A pplication S tate ) — архитектурные ограничения для REST -приложений.
С помощью HATEOAS клиент взаимодействует с сетевым приложением, сервер которого обеспечивает динамический доступ через гипермедиа . REST-клиенту не требуется заранее знать, как взаимодействовать с приложением или сервером за пределом гипермедиа.
В отличие от архитектуры SOA , где взаимодействие клиента с сервером строго определены интерфейсом, HATEOAS отделяет клиента от сервера и позволяет им независимо развиваться.
REST-клиент обращается к фиксированному URL, а все последующие действия клиента становятся известными из возвращаемых с сервера ресурсов. Типы ресурсов, представления и их связи стандартизированы. Клиент проходит по ресурсам, выбирая ссылки или взаимодействуя любым другим способом, возможным для этого типа ресурса. Таким образом RESTful-взаимодействия работают через гипермедиа, а не через заранее указанный интерфейс .
Например, сделать запрос возвращающий ресурс счёта в XML-представлении :
GET /accounts/12345 HTTP/1.1
Host: bank.example.com
Accept: application/xml
...
Ответ будет таким::
HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: ...
<?xml version="1.0"?>
<account>
<account_number>12345</account_number>
<balance currency="usd">100.00</balance>
<link rel="deposit" href="https://bank.example.com/accounts/12345/deposit" />
<link rel="withdraw" href="https://bank.example.com/accounts/12345/withdraw" />
<link rel="transfer" href="https://bank.example.com/accounts/12345/transfer" />
<link rel="close" href="https://bank.example.com/accounts/12345/close" />
</account>
Ответ содержит ссылки на депозит, снятие, перевод и закрытие аккаунта
В случае отрицательного баланса, доступен только депозит:
HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: ...
<?xml version="1.0"?>
<account>
<account_number>12345</account_number>
<balance currency="usd">-25.00</balance>
<link rel="deposit" href="https://bank.example.com/account/12345/deposit" />
</account>
Теперь доступна только одна ссылка: внести больше денег. Отсюда «the Engine of Application State» в названии. Возможные действия различаются в зависимости от состояния ресурса.
Клиенту не нужно знать заранее типы ресурсов и механизмы взаимодействия с ним, через сервер. Понимание новых типов ресурсов приобретается в режиме реального времени, во время исполнения, при получении ресурсов от сервера .
В докторской диссертации Роя Филдинга определены ограничения HATEOAS как неотъемлемая часть функции «единого интерфейса» .