Для API только приложения, я имею в виду проверки входящего запроса HTTP с before_action
, например .:Соответствующий способ ответа на неподдерживаемые HTTP-запросы?
# Returns a 405 status for unsupported HTTP methods.
def verify_post_request
head :method_not_allowed unless request.post?
end
Но я не люблю того, чтобы создать дополнительные маршруты для обработки каждого неподдерживаемого метода HTTP. Без дополнительных маршрутов приложение возвращает 404 для неподдерживаемых запросов, поскольку соответствующий маршрут не найден. Наличие всех этих дополнительных «неиспользуемых» маршрутов кажется запахом кода.
Какая у вас лучшая практика? Является ли это лучше
- Есть маршруты для поддерживаемых методов, которые вы поддерживаете, и 404 в противном случае
- Есть маршруты для всех методов, так что неподдерживаемые те отвечают более информативный 405
Бывших кажется лучше поддерживающий (код чистки), в то время как последний кажется лучше для пользователя (описательная обратная связь).
Я не вижу причин для этого. Это дополнительная работа или что-то, что не является частью приложения. Если у меня есть «ресурс: пользователь», определенный на моих маршрутах, почему я хочу иметь еще 20 строк, определяющих все другие комбинации типов запросов и путей, которые неявно определяются «ресурсом»? – Jon
@Jon, имея маршруты для других методов HTTP, позволяет вам возвращать более точный ответ IMO. Например, если кто-то делает запрос, используя PUT вместо PATCH, ваше приложение может ответить более информативным 405 «Метод не поддерживается» вместо 404 «Не найден». Что касается количества строк, вам не обязательно нужно больше линий в зависимости от того, как вы маршрутизируете. Например. 'match '/ foo/bar/action', to: 'foo/bar # action', через: [: get,: post]' vs 'match '/ foo/bar/action', to: 'foo/bar # action ', через:: all' – Dennis
Я написал что-то вроде 20 приложений RoR. Это никогда не имело значения. Если кто-то использует неправильный метод HTTP, то они делают что-то странное или неправильное с вашим приложением, и нет никаких причин для их удовлетворения. Я знаю, что это звучит жестко, но пока пользователи используют ваши ссылки и формы, и вы правильно настроили его и проверяете охват, чтобы гарантировать, что, другими словами, обычное приложение, оно ничего не добавит к опыту ваших пользователей. дать им более подробные ошибки, если они попытаются каким-то образом использовать неправильный глагол для доступа к странице. –