HATEOAS (Hypermedia as the Engine of Application State) — архитектурное ограничение REST API. Рассмотрим его назначение и применение.
Что такое HATEOAS?
Термин HATEOAS расшифровывается как «гипермедиа как двигатель состояния приложения». Понимание этого определения требует понимания гипермедии.
Обычная веб-страница, загружаемая браузером, отображает контент и предоставляет возможности взаимодействия: кнопки, ссылки, вкладки для выполнения действий (например, клонирование, скачивание, просмотр).
Типичный запрос GET к REST API, например GET /users, возвращает только данные (список пользователей или данные одного пользователя, если указан ID), без информации о возможных действиях. HATEOAS решает эту проблему.
HATEOAS в действии
Запрос с использованием HATEOAS возвращает данные и ссылки (URI) на возможные действия. Например, запрос к ресурсу учетной записи может вернуть данные баланса и ссылки для депозита, снятия, перевода или закрытия счета. Это может быть представлено в формате JSON или XML. Пример в JSON:
{
"accountNumber": "12345",
"balance": 1000,
"links": [
{"rel": "deposit", "href": "/accounts/12345/deposit"},
{"rel": "withdrawal", "href": "/accounts/12345/withdrawal"},
{"rel": "transfer", "href": "/accounts/12345/transfer"}
]
}
Зачем нужен HATEOAS?
Главное преимущество HATEOAS – слабая связанность. Жестко закодированные URL-адреса в клиенте создают сильную зависимость от реализации сервиса. HATEOAS устраняет эту зависимость, предоставляя ссылки на действия в ответе сервера. Клиент использует эти ссылки, не зная внутренней структуры API.
Важные аспекты HATEOAS
При разработке RESTful API с HATEOAS важно использовать стандартный формат для представления ссылок. Часто используется HAL (Hypertext Application Language), предоставляющий структурированный способ описания гиперссылок:
- _links: объект, содержащий информацию о ссылках.
- rel: атрибут, определяющий отношение ссылки к ресурсу.
- href: атрибут, содержащий URL-адрес ссылки.
- embedded: вложенные ресурсы.
Многие фреймворки для разработки REST API предоставляют инструменты для работы с HATEOAS.
Краткое резюме
HATEOAS позволяет REST API возвращать данные и ссылки на возможные действия с ними. Это делает клиентские приложения слабо связанными с серверной частью и упрощает развитие и поддержку API.