Открыть сервис

HATEOAS

HATEOAS (Hypermedia as the Engine of Application State — гипермедиа как движок состояния приложения) — это принцип архитектуры RESTful веб-сервисов, согласно которому сервер предоставляет клиенту не только запрашиваемые данные, но и набор ссылок (гипермедиа), описывающих возможные дальнейшие действия. Это позволяет клиенту динамически взаимодействовать с API, не имея заранее зафиксированной схемы URL-адресов.

История и происхождение

Термин HATEOAS был впервые сформулирован Роем Филдингом в его докторской диссертации «Architectural Styles and the Design of Network-based Software Architectures» (2000 год), где он описал архитектурный стиль REST. Филдинг выделил HATEOAS как одно из ключевых ограничений, отличающих истинный REST от так называемых «RESTful» сервисов, которые часто ограничиваются только использованием HTTP-методов и форматов данных, игнорируя гипермедиа.

Идея HATEOAS восходит к более ранним концепциям гипертекста и гипермедиа, разработанным в 1960-х годах (в частности, Тедом Нельсоном и Дугласом Энгельбартом) и реализованным в World Wide Web. Веб-сайты по своей природе являются гипермедийными: HTML-страницы содержат ссылки на другие страницы, которые пользователь может посетить. HATEOAS переносит этот принцип на уровень API.

Основные принципы

Динамическое обнаружение возможностей

Клиент, отправляя запрос к API, получает в ответе не только запрошенные данные, но и список ссылок (URL), которые указывают на возможные следующие шаги. Например, при создании нового заказа в интернет-магазине сервер может вернуть ссылки на оплату, отмену заказа или просмотр его статуса. Клиенту не нужно знать эти URL заранее — он находит их в ответе.

Отсутствие жёсткой привязки к URL

Традиционные REST API часто требуют, чтобы клиент знал структуру URL (например, /orders/123, /orders/123/pay). При изменении серверной структуры URL такие клиенты ломаются. HATEOAS решает эту проблему: клиент следует ссылкам, предоставленным сервером, а не конструирует URL самостоятельно. Это делает API более устойчивым к изменениям.

Самоописываемость ответов

Ответ сервера в стиле HATEOAS содержит не только данные, но и метаинформацию о том, как эти данные можно использовать. Клиент может интерпретировать ссылки и выбирать действия, не обращаясь к внешней документации (хотя она всё равно может быть полезна для понимания семантики ссылок).

Структура ответа

Типичный ответ HATEOAS содержит два основных компонента:

Пример ответа в формате JSON:

``json { "orderId": 123, "status": "pending", "total": 1500.00, "_links": { "self": { "href": "/orders/123", "method": "GET" }, "pay": { "href": "/orders/123/pay", "method": "POST" }, "cancel": { "href": "/orders/123", "method": "DELETE" } } } ``

Реализация и форматы

Форматы представления

HATEOAS не привязан к какому-то одному формату данных. Наиболее распространённые:

Примеры реализации

Преимущества и недостатки

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

Недостатки

Критика и ограничения

На практике HATEOAS редко реализуется в полном объёме. Большинство современных REST API (в том числе популярные сервисы, такие как Twitter, GitHub, Stripe) не следуют этому принципу строго. Причины:

Некоторые критики утверждают, что HATEOAS — это идеализированная концепция, которая редко приносит практическую пользу в реальных проектах, особенно в условиях быстро меняющихся требований и ограниченных ресурсов.

Связанные концепции

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →