LINUX.ORG.RU

Может ли завершиться успешно команда, на которую ответило ошибкой 4xx?

 


1

2

Объясните, пожалуйста, правила для REST API. В каких случаях должно выдавать какие ошибки?

Есть сервер, на котором крутится задача, которая будет там крутиться ещё несколько минут. Или часов. Приходит команда изменить какие-то исходные данные. Так как команды прерывать текущие задачи не было, а изменяемые данные используются задачей, они будут изменены только по окончании текущей задачи. Поэтому сервер выдаёт ошибку 409 Conflict. Это правильно? Как принято поступать в подобных случаях?

Перемещено hobbit из talks

★★★

Если делать в лоб по RFC, то HTTP 100 Continue, а потом 409. Если смотреть по практичности, то назначить id операции и разбить на несколько запросов.

@snizovtsev, там рядом нашёлся 102, который по смыслу подошёл бы лучше всех, но который объявлен deprecated. На что рекомендуют его заменять?

olegd ★★★
() автор топика
Ответ на: комментарий от XyAH

500? Это – не то, чтобы ошибка, а скорее один из вариантов штатного поведения. Команда принята к исполнению, но может выполниться нескоро.

olegd ★★★
() автор топика

Приходит команда изменить какие-то исходные данные. Так как команды прерывать текущие задачи не было, а изменяемые данные используются задачей, они будут изменены только по окончании текущей задачи

Команда принята? Значит 2xx, например 200. И вернуть id по которому можно вернуться и проверить статус ее выполнения. В статусе помимо статуса возвращать прогресс / эстимейт.

slowpony ★★★★★
()

В каких случаях должно выдавать какие ошибки?

На практике может быть что угодно.

Поэтому сервер выдаёт ошибку 409 Conflict. Это правильно?

ЯННП, если сервер просто отфутболивает, то правильно, но судя по описанию тебе лучше взять код 425 Locked. Если сервер принимает запрос, но он будет исполнен позднее (ставится в очередь?) то нужно вернуть 202 Accepted.

no-such-file ★★★★★
()

Возвращай 200, команда то принята. А в теле ответа уже можешь возвращать нюансы как именно принята - сразу или в очередь. А использовать 4хх и 5хх коды для успешного выполнения операции это лютое извращение. Их надо возвращать только в варианте когда клиенту нужно снова обратиться через какое-то время, потому что сервер ничего не сохранил.

KivApple ★★★★★
()
Последнее исправление: KivApple (всего исправлений: 1)

4XX - это клиентские ошибки для твоего приложения. 401 (требуется авторизация, неверные логин/пароль), 403 (нет прав на выполнение действия, например, требуются админские права) и 404 (ресурс не найден), 400 - для всего остального. Когда приходит команда, то ты отдаешь 201 создано либо просто 200… и все. Задание то создано, а результат его выполнения - уже по веб-сокетам приходит в оповещениях и на отдельном ресурсе список задач со статусом должен быть

uwuwuu
()
28 мая 2023 г.

Неправильно. Если команда принята к исполнению, лучше вернуть 2xx В теле ответа можно поместить объяснение для человеков и статус-код для машин.

tamnesral
()