JSON-API ожидает, что я предоставлю id
ресурсам, которые мы создаем и перемещаем.Но как нам обращаться со случаями, когда у ресурса нет естественного идентификатора?
Хорошим примером является система котировок, где цена должна быть определена на стороне сервера.В этом случае мы не даем клиенту прайс-лист, чтобы самостоятельно определить цену, клиент должен что-то отправить в API, чтобы сервер мог определить цену.
Однако мы не делаемЯ не хочу, чтобы кавычка была сохранена в БД, поскольку технически она не «заблокирована», клиент просто играет с опциями, прежде чем продолжить «
Один из способов, который я задумал, - создать UUID для кавычкив состоянии ожидания
Например
POST /quotes
{ "data": { "type": "quotes", "attributes": {
"state": "pending", <all the items>
} }
returns
{ "data": { "type": "quotes", "id": <UUID>, "attributes": {
"price": 900, "state": "pending", <all the items>
} }
Теперь у меня есть цена в ответе, но я пока не могу получить ее по определенному URL-адресу, как / quote / 1234.
Затем, после обновления состояния на "котировку", я могу физически сохранить в БД, получить правильный идентификатор, и клиент может GET / quote / 1234, чтобы увидеть отправленную котировку и ее цену.
Альтернативой являетсясоздать целевые ресурсы , которые моделируют намерение получить цену или выполнить какой-то рабочий процесс. Я просто не знаю, как бы вы реализовали это в контексте JSON-API, потому что, опять же, нет идентификаторов.
Как следует обрабатывать эти динамические / расчетные / эфемерные конечные точки ресурса?