Как сделать маршруты Ruby on Rails RESTful красивыми и удобными для человека? - PullRequest
2 голосов
/ 24 января 2010

С помощью 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, но кажется неправильным, что это должно привести к (отрицательным) изменениям, видимым для пользователя.

1 Ответ

1 голос
/ 24 января 2010

Я думаю, что в целом REST предоставляет непротиворечивые, интуитивно понятные и удобные для пользователя URL-адреса, особенно когда речь идет о поиске ресурсов (GET), что обычно и делает пользователь (страницы, которые он чаще всего добавляет в закладки). Обычно вы имеете дело с URL-адресами, такими как

/posts/34
/articles/456/edit
/companies

Вы столкнулись с изолированным (хотя и неизбежным, и поэтому очень раздражающим) исключением, в котором я никогда не видел действительно удовлетворительного решения, кроме использования AJAX. Проблема заключается в том, что маршруты RESTful сияют в приложениях, которые имеют тщательно продуманные домены, где ресурсы на сервере имеют смысл даже для пользователя (как в примерах выше), тогда как управление сессиями по своей сути неясно для пользователя.

Если вы недовольны URL-адресом /sessions, почему бы не использовать псевдоним /login/submit для / session / create?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...