У меня есть REST API, который для некоторых из таких объектов, как DELETE, POST или PUT, у меня есть некоторые правила проверки, которые могут возвращать ошибку.
Теперь мне нужен новый тип ошибки, такой как некритическая ошибка, которая должна завершаться с ошибкой обычным способом, но должна действовать, если есть отправка флагов «supress warnings». Такого пользователя могут спросить: «Вы действительно хотите изменить этот статус, вы еще не закончили»
Вопрос : есть ли лучшая практика для таких ошибок?
Дополнительные вопросы :
- Есть ли какая-то семантика HTTP для такого поведения, которое я могу использовать?
- я все еще придерживаюсь идеи REST (для меня это выглядит, я делаю) - я держу это без сохранения состояния
rm /file
которая «предупреждает», что файл доступен только для чтения, и в любом случае удаляется.409 CONFLICT
для предупреждения ответа. Таким образом, клиент получает указание, что он может принудительно вызвать вызов с той же конечной точкой и телом с параметрами exttra "force = 1"Ответы:
В http нет кодов результата предупреждения, вы либо возвращаете успех (200), либо ошибку (400, 500). Единственное, что я знаю об этом, может быть аналогом того, что вы хотите, это что-то вроде кода 401 «несанкционированный» - что является явным отказом, но заставляет большинство клиентов автоматически повторять попытку подключения с учетными данными.
Для REST API вам нужно сообщить серверу о статусе запроса и о том, как обработать результат - вы не можете отправить PUT и ожидать ошибку, если клиент не завершен, или успех, если он есть - сервер должен знать это информация для того, чтобы отправить правильный код результата.
Таким образом, вы можете отправить флаг «Подавить предупреждения» вместе с вашим запросом, если он не установлен, сервер вернет код ошибки 409 (или аналогичный), а если установлен, вернет код 200 вместо этого. Пользователь не может спросить «хотите ли вы изменить этот статус» после отправки изменения статуса.
Вы можете сделать запрос к серверу, чтобы спросить, может ли пользователь изменить статус, и после этого выполнить соответствующий запрос.
источник
Если вы хотите разрешить пользователю переопределять вашу обычную обработку ошибок, вы можете рассмотреть возможность возврата статуса 200 SUCCESS с дополнительной информацией в расширенных заголовках HTTP. Например, вы можете вернуть
Это даст вашему клиентскому коду информацию, необходимую для предупреждения пользователя или принятия корректирующих действий самостоятельно.
источник