какой код состояния выдавать при ошибке параллелизма?

Я отдыхаю, что получает между прочим свидание и вместе с ним делает заказ. Проблема возникает, когда 2 человека «в одно и то же время» пытаются забронировать номер в один и тот же день в одно и то же время.

Очевидно, что первый, кто сделает запрос, сможет записаться на прием, поэтому я верну статус 200. С другой стороны, тот, кто придет позже, сделает тот же запрос, но сервер выкинет ошибка, потому что он не может зарезервировать ту же встречу (уже зарезервирован). В этом случае, какой код состояния http должен быть выбран?

Семейный код 500 не кажется правильным, потому что выбрасываемое исключение вызвано самой логикой бизнеса.

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

Спасибо!


person Geronimo    schedule 08.01.2019    source источник
comment
409 - Конфликт?   -  person jonrsharpe    schedule 08.01.2019
comment
Ошибка 409, вероятно, то, что вы ищете. Для справки - en.wikipedia.org/wiki/List_of_HTTP_status_codes   -  person Mo A    schedule 08.01.2019
comment
@MAT, если вы собираетесь ссылаться на список кодов ошибок, почему бы не использовать фактический канонический список? https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml   -  person Eric Stein    schedule 08.01.2019
comment
Хороший друг @EricStein, будет ссылаться на канонический список, который вы предложили в будущем.   -  person Mo A    schedule 08.01.2019


Ответы (1)


Я сам исследовал это, и предложение Джонршарпа о конфликте 409 является наиболее подходящим.

https://tools.ietf.org/html/rfc7231#section-6.5. 8:

Код состояния 409 (конфликт) указывает, что запрос не может быть выполнен из-за конфликта с текущим состоянием целевого ресурса. Этот код используется в ситуациях, когда пользователь может разрешить конфликт и повторно отправить запрос. Серверу СЛЕДУЕТ генерировать полезную нагрузку, которая включает в себя достаточно информации, чтобы пользователь мог распознать источник конфликта.

Конфликты чаще всего возникают в ответ на запрос PUT. Например, если использовалось управление версиями, а представление PUT включало изменения в ресурсе, которые противоречат тем, которые были сделаны в результате более раннего (стороннего) запроса, исходный сервер может использовать ответ 409, чтобы указать, что он не может завершить обработку. запрос. В этом случае представление ответа, вероятно, будет содержать информацию, полезную для объединения различий на основе истории изменений.

person JohnOpincar    schedule 08.05.2020