Я получаю сообщение «Метод 405 не разрешен», когда пытаюсь выполнить DELETE без передачи идентификатора ресурса, который необходимо удалить. Вот мой URL-адрес.
http://localhost:8080/api/vendors/delete/1234/
где в идеале я должен был указать идентификатор в конце URL-адреса, например:
http://localhost:8080/api/vendors/delete/1234/{id}
Я убежден, что это должен быть 405, но моя команда QA думает иначе. Они говорят, что это должно быть 400. Может ли кто-нибудь указать мне какой-либо ресурс, который четко указывает, какой HTTP-код должен быть для этого сценария.
На мой взгляд, 404 Not Found или 400 Bad Request — хороший вариант. Пожалуйста, обратитесь к этому ответу, а также Коды состояния HTTP
По вашему основному вопросу, если метод равен DELETE
, а путь /api/vendors/delete/1234/
действителен для других методов, но не для DELETE
, то 405 Method Not Allowed
(«Метод запроса не поддерживается для запрошенного ресурса») правильный, так как есть «ресурс» на этом пути, который не поддерживает удаление, например он может поддерживать GET
для получения списка поставщиков.
Если ресурса там нет, т.е. способ не имеет значения, то правильным ответом будет 404 Not Found
("Запрашиваемый ресурс не найден").
Если метод DELETE
, а не GET
, PUT
, POST
или любой другой, вам не нужно .../delete/...
в пути.
Если вы пытаетесь удалить поставщика 1234, путь должен быть http://localhost:8080/api/vendor/1234
, а метод — DELETE
. Обработчик действия должен использовать /api/vendor/{id}
в объявлении.
Ах, ответ, который я искал. На самом деле ваш третий пункт спас положение. Как только я избавился от «удалить» в URL-адресе, я вижу 404 для запроса без {id} в URL-адресе. Чего и следовало ожидать... Большое спасибо, Андреас.
Если у вас есть эта конечная точка с другим методом, тогда 405 будет правильным. Если у вас нет этой конечной точки с другим методом, это должно быть 404.