Код возврата для неправильного метода HTTP в REST API?

Наш пользователь API может получить корневой документ (список коллекции), отправив GET запрос на адрес корневого API. Если он отправит POST, мы должны что-то вернуть. Тот же вопрос применяется к другим путям ресурсов, например, например. отправка PATCH по пути запроса и т.д. Не все методы имеют смысл на некоторых путях.

Как я вижу из HTTP RFC, мы должны вернуть код 405: Не разрешен метод и отправить ответный заголовок Allowed со списком разрешенных методов.

Я вижу, что, например, API GitHub возвращает 404: Не найден в случае, описанном выше (отправка POST в root).

Каким будет правильный ответ? 404 или 405? Я вижу 405 более дружественным к разработчикам, поэтому есть ли причина не использовать его?

Ответ 1

Ожидаемое поведение в этом случае в соответствии со спецификацией HTTP и рекомендациями REST должно состоять в возврате 405 Method Not Allowed. Ресурс есть, так как GET работает, поэтому 404 Not Found будет путать.

Я не знаком с API GitHub, но в некоторых случаях я вижу, что для 403 Forbidden он также возвращает 404 Not Found:

Запросы, требующие аутентификации, возвратят 404 Not Found вместо 403 Forbidden, в некоторых местах. Это делается для предотвращения случайной утечки частных репозиториев для неавторизованных пользователей.

Возможно, поведение на корневом адресе является частью более крупного механизма, который обычно обрабатывает такие случаи, кто знает. Возможно, вы могли бы спросить?