Гипертекст как движок состояния приложения (HATEOAS) - это нечто большее, чем просто использование ссылок. По сути, он навязывает модель взаимодействия, которая используется в Интернете в течение двух десятилетий довольно успешно. В Интернете сервер обычно «учит» клиентов (браузеров) достигать чего-либо с помощью отношений ссылок , которые можно использовать для автоматической загрузки связанных ресурсов или указания на ссылочный ресурс, и Веб-формы , которые определяют синтаксис и семантику каждого из соответствующих поддерживаемых (входных) элементов, то есть текстового поля, элемента параметра для выбора одного или нескольких вариантов выбора, раскрывающегося списка или даже виджета слайдера. На основании возможности каждого из элементов, которые знает клиент, т. Е. Что кнопка хочет быть нажата или нажата, в то время как текстовые поля хотят некоторого пользовательского ввода и прочее, или ссылку, помеченную именем отношения ссылки prefetch
может загружаться автоматически после завершения загрузки текущей страницы, так как клиент может вызвать ее в следующий раз, или отношение ссылки preload
может дать указание агенту пользователя загрузить указанный ресурс в начале процесса загрузки текущей страницы.
Форма не только рассказывает клиенту о поддерживаемых полях, которые есть у ресурса, но и о целевом URI, на который отправляется запрос, HTTP-метод для использования при отправке запроса, а также медиа-тип, который в случае веб-форм обычно неявно установлено на application/x-www-form-urlencoded
.
В идеальном мире клиент просто использует информацию, предоставленную сервером. К сожалению, мир не идеален, и со временем люди придумали множество других решений. Одним из них является URI-шаблон , который в основном позволяет клиентам использовать базовый c URI и заполнять определенные заполнители конкретными значениями. Поскольку использование шаблонов требует некоторого знания намерения URI или параметров, которые необходимо передать, такие возможности имеют смысл только как часть поддержки медиа-типа.
Обычный JSON (application/json
) по умолчанию вообще не поддерживает URI, и поэтому пользовательский агент, получающий простую полезную нагрузку JSON, может не иметь возможности автоматически заменить шаблонный URI на конкретный. из коробки. JSON Гипер-схема (application/schema+json
) пытается добавить поддержку ссылок и шаблонов URI для простых JSON полезных нагрузок. Пользовательский клиент, тем не менее, должен иметь подсказку с соответствующим медиа-типом для автоматического разрешения полного URI. Таким образом, пользовательский агент также должен поддерживать соответствующий тип мультимедиа, иначе он не сможет успешно обработать документ (преобразовать URI шаблона в реальный URI).
JSON Язык приложений гипертекста aka HAL JSON также поддерживает шаблоны URI для ссылок. application/collection+json
поддерживает два вида шаблонов - шаблоны запросов и объекты-шаблоны . Первый пример похож на шаблон URI, позволяя добавлять определенные параметры запроса к целевому URI при отправке запроса, в то время как последний позволяет определить целый объект, который содержит все входные элементы, используемые для добавления или редактирования элемента в коллекции. , JSON -LD на самом деле не поддерживает AFAIK для шаблонов URI, хотя использует концепцию так называемого контекста, в котором определенные термины могут использоваться для сокращения URI. Таким образом, что-то вроде name
может использоваться в контексте для URI, подобного http://schema.org/name
.
. Как можно надеяться, поддержка шаблонов URI зависит от типа носителя, используемого для обмена данными. В случае описанного примера github GET /users/:username
это более или менее напоминает типичную документацию Web API, аналогично тому, как это делается в документации Swagger API , к которой, к сожалению, вряд ли имеет какое-либо отношение HATEOAS .