Сделать метод POST API правильно обрабатывать одновременные запросы - PullRequest
0 голосов
/ 07 ноября 2018

Итак, давайте представим, что есть некая сущность под названием «Продукты», и у вас есть REST API, включая POST, который создает продукт. Продукт имеет поле «ID», которое генерируется автоматически, и уникальное поле «Имя». Что вы делаете внутри метода:

  1. Подтвердите, что нет другого продукта с таким же именем. Таким образом, вы выбираете продукт из БД и сравниваете Имя с входным параметром
  2. Если этот продукт уже создан - вы возвращаете 400
  3. если продуктов с указанным именем нет - вы создаете объект и сохраняете его в БД

Проблема в том, что если есть 2 одновременных POST-запроса, вы получите ошибку. Должны ли мы использовать какой-то механизм блокировки здесь? Как это сделать правильно?

1 Ответ

0 голосов
/ 07 ноября 2018

Нет необходимости использовать блокировку любого вида, используйте уникальное ограничение в поле имени, это лишит вас возможности хранить два продукта с одинаковым именем. Затем поймайте выброшенное исключение и верните его как 400.

Сохраняйте остальную логику вашего метода такой же, я предполагаю, что это очень сложный случай, и шансы на то, что два запроса действительно произойдут в один и тот же момент, действительно малы. 99,999% времени ваша проверка поймает это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...