Понимание HATEOAS
HATEOAS (Hypermedia as the Engine of Application State) - это правило архитектуры REST приложения.
Гипермедиа сайт предоставляет информацию для динамической навигации по REST интерфейсам сайта, включая гипермедиа-ссылки с ответами. Это отличает их от систем на основе SOA и WSDL интерфейсов. С SOA сервера и клиенты как правило должны иметь доступ к фиксированной спецификации, которая может быть где-угодно на текущем web-сайте, другом, либо отправлена по e-mail.
Примеры
Ниже представлен код объекта Customer
:
class Customer {
String name;
}
Простое JSON представление выглядит так:
{
"name" : "Alice"
}
Здесь информация о клиенте, но она ничего не содержит из числа её релевантных ссылок.
HATEOAS ответ будет выглядеть следующим образом:
{
"name": "Alice",
"links": [ {
"rel": "self",
"href": "http://localhost:8080/customer/1"
} ]
}
Этот ответ содержит не только имя человека, но и включает URL, по которому он расположен.
-
rel означает отношение. В данном случае, гиперссылка на себя. Более
сложные системы могут включать другие отношения. К примеру, отношение
"rel":"customer"
связывает запрос с другим клиентом - href - это полная URL, которая однозначно указывает на ресурс
Возможно построение более сложных отношений. С HATEOAS на выходе можно легко определить, как взаимодействовать с сервисом, не зная спецификации или другого соответствующего документа.
Взгляните на каталог ниже из приложения Spring Data Book:
{
"content": [ {
"price": 499.00,
"description": "Apple tablet device",
"name": "iPad",
"links": [ {
"rel": "self",
"href": "http://localhost:8080/product/1"
} ],
"attributes": {
"connector": "socket"
}
}, {
"price": 49.00,
"description": "Dock for iPhone/iPad",
"name": "Dock",
"links": [ {
"rel": "self",
"href": "http://localhost:8080/product/3"
} ],
"attributes": {
"connector": "plug"
}
} ],
"links": [ {
"rel": "product.search",
"href": "http://localhost:8080/product/search"
} ]
}
Отображены не только элементы и их цены, но и URL для каждого ресурса, предоставляя информацию о том, как получить доступ к этим ресурсам. В соответствии с Richardson Maturity Model, HATEOAS рассматривается как последний уровень REST. Это означает, что каждая ссылка предполагает реализацию стандартных REST действий GET, POST, PUT и DELETE (или их подмножество). Т.о., предоставляя ссылки, как показано выше, клиенту дается информация по навигации по сервису.
С оригинальным текстом урока вы можете ознакомиться на spring.io.
comments powered by Disqus