Я думаю, что здесь есть две связанные, но отличные проблемы: открытые URL и методы контроллера, на которые они направляются. Поскольку любой из них может быть изменен независимо, я рассмотрю их отдельно. Также, обратите внимание, что я буду говорить немного свободно и строго о REST, реализованном в контексте Rails.
Что касается внешних URL-адресов, я думаю, что это помогает различать URL-адреса, составляющие API системы (:GET users/1
, :PUT users/1
и т. Д.), И URL-адреса, которые просто существуют для удобства людей. с помощью веб-браузера (users/new
, users/5/edit
и т. д.). API - это получение ресурсов или взаимодействие с ними каким-либо образом - это URL-адреса, которые другой компьютер будет использовать при взаимодействии с вашей системой. Эти URL, как правило, являются просто адресом ресурса, с которым вы хотите взаимодействовать, и затем вы используете метод HTTP и параметры, чтобы указать, что именно вы хотите сделать (GET = показать мне этот ресурс, PUT = изменить этот ресурс и т. Д. ). Удобные URL-адреса предназначены для отображения формы, облегчающей человеку использование API. Вы можете отредактировать пользователя, используя curl, чтобы вручную ввести все параметры, которые вы хотите изменить, и сделать POST для users / 1, но для человека намного проще, если вы можете просто использовать форму.
Чтобы посмотреть на приведенные выше примеры, :GET users/create
может иметь смысл (и очень похож на :GET users/new
, который используется по умолчанию), но :POST users/create
будет примерно переводиться как «создать нового пользователя / создать». ", что не совсем имеет смысла.
Что касается методов контроллера, то "new" и "create" выполняют принципиально разные задачи, как мы надеемся, понятно из предыдущих параграфов. Один из них отображает форму, а другой создает новый ресурс. Вы, конечно, можете перегружать один и тот же метод, чтобы сделать это, но без веской причины для этого создание двух небольших независимых методов для обработки двух небольших независимых задач, вероятно, является более естественным подходом.