HATEOAS: Гипермедиа в REST API — просто и понятно

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.

Что будем искать? Например,программа