С помощью Ruby on Rails REST является отличной концепцией с точки зрения упрощения вещей для разработчика и упрощения доступа к ресурсам для машин, но он также создает феноменально некрасивые URL-адреса для людей.
Например, используя популярный плагин RESTful Authentication для обработки входа и аутентификации пользователя, он создает два контроллера для аутентификации и авторизации, пользователей и сеансов. Это связано с тем, что пользователь представляет долгосрочные ресурсы, связанные с пользователем, такие как логин и пароль, в то время как сеанс представляет информацию о входе в систему, связанную с сеансом входа в систему, такую как ресурсы cookie. Таким образом, URL для входа в систему сайта будет site.com/sessions/new.
По умолчанию он также создает маршрут, чтобы помочь этому:
map.login '/ login',: controller => 'session',: action => 'new'
Тем не менее, это на самом деле только помеха, потому что при отправке для правильной работы маршрутов создаваемая форма использует <% form_tag session_path do -%>. Это приводит к тому, что сообщение формы переходит к SessionsController # create, но в случае сбоя при отправке формы (например, из-за неверных учетных данных) браузер пользователя остается по адресу site.com/session, что выглядит очень неудобно. Хуже того, если пользователь вручную введет этот URL, он будет недоступен, пока я не определю метод индекса. Если я изменю form_tag на <% form_tag login_path do -%>, то это приведет к POSTS к SessionsController # new, который полностью испортит REST.
Как я могу иметь согласованные и разумно выглядящие URL с REST? В целом, я действительно соблазняюсь удобством использования REST, но кажется неправильным, что это должно привести к (отрицательным) изменениям, видимым для пользователя.