Я работаю над API веб-сервисов, используя представление REST HATEOAS.Предложить действие для потребителя в HATEOAS
Мой клиент может создать элемент (например, заглушки из BlogPost):
POST /item
204 Created
Content-Type: application/vnd.foo.item+json
{
"id": 42,
"title": "Lorem Ipsum",
"status": "STUB",
"body": "Very long text."
"_links": {
"self": {
"href": "/item/42"
},
"activate": {
"href": "/item/42/activate"
},
}
}
После этого клиент может активировать пункт следующего за activate
линии связи (например, идти жить с почтой) , Поэтому он обращается к API еще раз:
POST /item/42/activate
200 Ok
Content-Type: application/vnd.foo.item+json
{
"id": 42,
"title": "Lorem Ipsum",
"status": "ACTIVE",
"body": "Very long text."
"_links": {
"self": {
"href": "/item/42"
},
"permalink": {
"href": "/item/42/permalink"
}
}
}
До сих пор это нормально. Но проблема в том, что я ищу способ рассказать клиенту предложение о следующем действии (это бэкэнд-бизнес-логика).
В моем случае может быть:
- Принесите пользователь размещать страницу после Permalink
- Принеси пользователь магазина корзину купить почтовую дополнительные возможности (видимость, больше изображений, стартовую позицию и т.д. на ...)
- Сообщите пользователь, что сообщение отложенного содержания обзору
Я не имею представления о том, как я мог инкапсулировать эту информацию в HATEOAS. я думал что-то вроде:
POST /item/42/activate
200 Ok
Content-Type: application/json
{
"suggested-action": "check-censure-panel",
"censure-reason": "censored (gambling)",
"_embedded": {
"foo.item": {
"id": 42,
"title": "Lorem Ipsum",
"status": "ACTIVE",
"body": "Very long text."
"_links": {
"self": {
"href": "/item/42"
},
"permalink": {
"href": "/item/42/permalink"
}
}
}
}
Но проблема заключается в том, что каждое предложенное действие неоднородна дополнительных атрибутов, другой пример может быть:
"suggested-action": "go-to-checkout",
"product-order": 424242100,
Они не имеют общий интерфейс, поэтому я не могу сделать aa vnd.foo.suggestedAction+json
.
Каков наилучший способ разработки этого ответа?
Это GET для активации не кажется очень спокойным. –
Вы правы: опечатка. Это 'POST' –