Возможно, поздно в игре, но я столкнулся с этой проблемой семантики, пытаясь создать REST API.
Чтобы немного расширить ответ Вриккена, я думаю, что вы можете использовать либо 409 Conflict
, либо 403 Forbidden
в зависимости от ситуации - короче, используйте ошибку 403, когда пользователь может абсолютно ничего не сделать для разрешения конфликта и завершения запрос (например, они не могут отправить DELETE
запрос на явное удаление ресурса) или использовать 409, если что-то может быть сделано.
Сервер понял запрос, но отказывается его выполнить.
Авторизация не поможет и запрос НЕ ДОЛЖЕН повторяться. Если
метод запроса не был HEAD и сервер хочет сделать общедоступным
почему запрос не был выполнен, он ДОЛЖЕН описать причину
за отказ в организации. Если сервер не хочет сделать
эта информация доступна клиенту, код состояния 404 (не
Найдено) можно использовать вместо.
В настоящее время кто-то говорит «403», и возникает проблема с разрешениями или аутентификацией, но спецификация говорит, что это в основном сервер, говорящий клиенту, что он не собирается этого делать, не спрашивайте это снова, и вот почему клиент не должен.
Что касается PUT
против POST
... POST
следует использовать для создания нового экземпляра ресурса, когда пользователь не имеет средств или не должен создавать идентификатор для ресурса. PUT
используется, когда идентификатор ресурса известен.
...
Принципиальная разница между запросами POST и PUT заключается в
отражено в различном значении Request-URI. URI в
POST-запрос идентифицирует ресурс, который будет обрабатывать вложенный
юридическое лицо. Этот ресурс может быть процессом приема данных, шлюзом к
какой-то другой протокол или отдельный объект, который принимает аннотации. В
напротив, URI в запросе PUT идентифицирует объект, заключенный в
запрос - пользовательский агент знает, для чего предназначен URI, и
Сервер НЕ ДОЛЖЕН пытаться применить запрос к другому ресурсу.
Если сервер желает, чтобы запрос был применен к другому URI,
он ДОЛЖЕН отправить ответ 301 (Постоянно перемещен); пользовательский агент МОЖЕТ
затем принять собственное решение относительно того, следует ли перенаправить
запрос.