Создание ресурса в асинхронном API REST. Допустимо ли, если мой сервер отвечает неполным ресурсом с индикатором состояния вместо возврата временного ресурса ?
В качестве примера, скажем, у меня есть служба, которая нотариально заверяет сообщения, добавляя их в блокчейн, чтобы позже доказать их существование (например, «Доказательство существования»).
Выполнение занимаетв то время как это хорошая идея сделать асинхронным.
Пользователь отправляет POST /messages
с полезной нагрузкой:
{
"message" : "Hello SO friends!"
}
Затем сервер отвечает 202 Accepted
телом:
{
"id" : 1999283,
"message" : "Hello SO friends!",
"status" : "pending",
"block" : null,
"timestamp" : null
}
И заголовок Location: /messages/1999283
Ресурс, изображенный выше, является неполным , так как он все еще не имеет блока и метки времени и имеет "pending "status.
Пользователь будет опрашивать /messages/1999283
и получит 200 OK
с тем же json, что и выше, в теле, пока сервер ожидает его добавления в блок.
Через несколько минут пользователь снова начнет опрос и получит 200 OK
вместе с complete resource:
{
"id" : 1999283,
"message" : "Hello SO Friends!",
"status" : "completed",
"block" : 10029,
"timestamp" : "20181215T204012Z"
}