Кажется распространенным в сообществе направляющих, по крайней мере, ответить на успешный POST
, PUT
или DELETE
запросы путем перенаправления вместо того, чтобы возвратить успех. Например, если я PUT
легальное изменение в моем профиле пользователя, идиоматический ответ был бы a 302 Redirect
к странице профиля.
Разве эта несправедливость не? Не были должны мы возвратиться 200 OK
от запроса? Или a 201 Created
, в случае a POST
запрос? Или тех, в Определениях Состояния HTTP/1.1 позволяются (или требуются к), включают ответ, так или иначе.
Я предполагаю, что задаюсь вопросом, прежде чем я пойду и "исправлю" свое приложение, существует ли там проклятое серьезное основание, почему сообщество пошло путем перенаправлений вместо успешных ответов.
Я предполагаю, несмотря на использование вами глагола PUT
, что вы говорите о веб-приложении, доступ к которому будет осуществляться в основном через браузер. В этом случае обычной причиной для последующего выполнения POST-запроса с перенаправлением является шаблон post-redirect-get , который позволяет избежать дублирования запросов, вызванных обновлением пользователем или использованием элементов управления назад и вперед в своем браузере. Кажется, что во многих случаях этот шаблон перегружается из-за перенаправления не на страницу успеха, а на следующее наиболее вероятное место, которое пользователь посетит. Я не думаю, что любой из упомянутых вами способов обязательно неверен, но выполнение перенаправления может быть более удобным для пользователя за счет несоблюдения строго семантики HTTP.
Это называется шаблоном POST-Redirect-GET (PRG) . Этот шаблон предотвратит (случайно) повторное выполнение клиентами неидемпотентных запросов, например, при перемещении вперед и назад в истории браузера.
Это хорошая общая практика веб-разработки, которая применима не только к RoR. Я бы просто оставил это как есть.
В идеальном мире, да, наверное. Однако HTTP-клиенты и серверы создают беспорядок, когда дело доходит до стандартизации, и не всегда соглашаются с правильным протоколом. Перенаправление после публикации помогает избежать таких вещей, как дублирование отправки формы.