Ответ 1
Я бы пошел с 409: Conflict
, потому что у вас есть нарушение состояния ресурса.
405: Method Not Allowed
также будет работать. Если вы хотите использовать 405
, вам нужно отправить заголовок Allow
, чтобы указать поддерживаемые методы, и поддерживаемые методы будут меняться в зависимости от состояния ресурса. На мой взгляд, этот код ответа хорошо подходит для ресурсов только для чтения, ресурсов, которые нельзя удалить и т.д., Но Darrel комментарии к этому сообщению действительны. Спецификация неоднозначна:
Метод, указанный в строке запроса, не разрешен для ресурс, идентифицированный Request-URI. Ответ ДОЛЖЕН включать Разрешить заголовок, содержащий список допустимых методов для запрашиваемого ресурс.
В любом случае вы должны предоставить информацию в теле ответа, чтобы клиент понял источник ошибки.
В отношении двух других упомянутых методов:
403: Forbidden
следует использовать, когда у вас нет соответствующих прав для изменения ресурса, т.е. если вы должны быть администратором, чтобы удалить этот ресурс, а вы нет.
412: Precondition Failed
в основном используется для условных запросов, где предварительные условия указаны явно в заголовках запросов. Например, вы можете иметь условные запросы PUT, которые должны выполняться только тогда, когда заголовок If-Match
действителен. Если вы не укажете ничего в заголовках запросов, я бы выбрал 409 более 412. Здесь спецификация для 412:
Предварительное условие, заданное в одном или нескольких полях заголовка запроса оценивается как false, когда он был протестирован на сервере. Этот ответ код позволяет клиенту размещать предварительные условия на текущем ресурсе метаинформации (данные поля заголовка) и, таким образом, метод применяется к ресурсу, отличному от указанного.