Что такое HATEOAS и какую роль этот принцип играет в REST API?

Ответ

HATEOAS (Hypermedia as the Engine of Application State) — это ограничение архитектурного стиля REST, согласно которому клиент взаимодействует с сервером полностью через гипермедиа, динамически предоставляемые в ответах сервера.

Проще говоря, вместо того чтобы клиент "зашивал" в свой код URL-адреса для действий (/users/123/deactivate), сервер в ответе сам предоставляет ссылки на возможные следующие действия.

Цель HATEOAS — уменьшить связанность (coupling) между клиентом и сервером. Клиенту не нужно знать структуру URL API, он просто следует ссылкам, которые ему предлагает сервер. Это позволяет серверу изменять свою URL-схему без необходимости обновлять клиентов.

Пример ответа API с HATEOAS:

Запрос на получение информации о заказе: GET /orders/123

Ответ сервера:

{
  "id": 123,
  "status": "shipped",
  "total": 99.99,
  "_links": {
    "self": {
      "href": "/orders/123"
    },
    "customer": {
      "href": "/customers/45"
    },
    "invoice": {
      "href": "/orders/123/invoice"
    },
    "track": {
      "href": "/shipping/track?order=123"
    }
  }
}

Клиент, получив этот ответ, знает, что он может получить счёт (invoice) или отследить (track) заказ, перейдя по соответствующим href.

Преимущества:

  • Слабая связанность: API можно развивать, не ломая старые клиенты.
  • Самодокументируемость: API становится более интуитивно понятным, так как возможные действия видны прямо в ответе.

Недостатки:

  • Усложнение: требует более продуманной реализации как на сервере, так и на клиенте.
  • Избыточность: может увеличивать размер ответа.