При построении службы REST с ограничением HATEOAS очень легко объявить о существовании ресурсов посредством связывания. Вы заходите GET
в корень моего сайта, а я отвечаю корневым документом, в котором перечислены все ресурсы первого уровня:
{
users: { href: "/users" }
questions { href: "/questions" }
}
Клиенты, которые понимают, как читать эти href
значения, могут выполнять GET
запросы к ним и обнаруживать все текущие ресурсы, доступные в приложении.
Это хорошо работает для базовых сценариев поиска, но не указывает, является ли ресурс запрашиваемым. Например, может быть целесообразно выполнить:
GET /users?surname=Smith
Существуют ли какие-либо форматы, которые могли бы выразить эту возможность запроса с достаточным количеством информации, чтобы клиент мог сформировать согласованный запрос без необходимости предварительного знания ресурса?
Кроме того, есть ли способ выразить, что клиенту разрешено выполнять POST
в определенном месте с ожидаемым местоположением. Например, можно ожидать, что клиент выполнит следующее для создания нового ресурса вопроса:
POST /questions
{
title: "Are there strategies for discovering REST services using HATEOAS?",
body: "When building a REST service with the HATEOAS constraint, it's very..."
}
Используя HTML в качестве формата для потребления человеком, мы можем выразить многое из этого с помощью форм и письменных подсказок, позволяющих человеку обнаруживать операции, которые ему разрешено выполнять в службе.
Существуют ли форматы, которые способны на подобные вещи для клиентов?
Ответы:
Как бы вы узнали, какие входные данные являются приемлемыми? То есть, если ваш клиент не имеет предварительных знаний, как бы вы определили семантику «фамилия»? Вы начинаете проникать на территорию, требуя что-то вроде OWL .
Я думаю, что более практично ожидать, что ваши клиенты поймут семантику хорошо известных типов mime; скажем, например, «текст / визитка» для людей.
источник
application/atomapp+xml
и сделать его доступным для всех клиентов, которые уже понимают этот формат. Вероятно, существует достаточно известных типов контента, чтобы сделать это практическим решением.Вы можете опубликовать информацию о своих услугах через "WADL"
http://en.wikipedia.org/wiki/Web_Application_Description_Language
Это необязательно, и не все бэкэнд-REST-технологии поддерживают это. Например, Jersey, «официальная» реализация jax-rs в java, поддерживает ее - она может быть сгенерирована автоматически.
Это довольно редко, чтобы увидеть это используется.
Я не знаю больших, использующих это. В общем, у вас есть веб-страница с описанием API.
источник
Spring имеет некоторую поддержку для этого, как и resteasy.
источник