Ресурсы, которые не сохраняют данные - PullRequest
0 голосов
/ 31 мая 2019

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, потому что, опять же, нет идентификаторов.

Как следует обрабатывать эти динамические / расчетные / эфемерные конечные точки ресурса?

1 Ответ

2 голосов
/ 31 мая 2019

Я бы создал отдельную таблицу для этих запросов перед кавычками. Я могу подумать о нескольких причинах, почему вы хотите, чтобы они были записаны в БД, у вас могут быть все виды метрик, например, сколько раз они играли с опциями, в течение какого времени, сколько времени им потребовалось для создания реальной цитаты и т. Д. И т. Д. И т. Д. Затем вы можете ограничить эти запросы, вы можете остановить спам таких запросов и т. Д.

Как только предварительная кавычка становится фактической кавычкой, в этот момент вы можете переместить данные в таблицу котировок и правильно использовать API, поскольку теперь у вас есть идентификаторы из предварительных кавычек, с которыми можно работать. Мне кажется, что вы все упростите, если просто сохраните их в БД и назначите им правильный идентификатор с самого начала.

...