Можно ли создавать бессмысленные синглтон-ресурсы только для того, чтобы оставаться RESTful? Рельсы - PullRequest
6 голосов
/ 29 мая 2011

В процессе создания электронной книги пользователи должны редактировать ее содержимое, редактировать ее метаданные, выбирать маркетинговые варианты (например, ценообразование и распространение) и публиковать.

Я начал помещать каждое из них вРесурс книги (содержимое, метаданные, параметры маркетинга и т. Д.)

Тогда каждый шаг процесса (содержимое, метаданные, маркетинг) - это действие внутри BooksController.

Но количество книг значительно выросло вТермины атрибутов и действий.

Мне интересно, лучше ли форсировать RESTfulness путем создания одноэлементных ресурсов, каждый из которых связан с их соответствующей книгой.

Маршруты будут:

  • / книга / 12 / содержание / редактировать
  • / книга / 12 / метаданные / редактировать
  • / книга / 12 / маркетинг / редактировать

Это кажется более элегантным, поскольку каждый из этих «ресурсов» является RESTful и имеет несколько атрибутов каждый.Но ресурсы не являются объектами (Marketings?).

Как вы думаете, можно ли создавать бессмысленные ресурсы только для того, чтобы быть RESTful и поддерживать код в порядке?

Есть ли лучший способ сгруппировать подобныеатрибуты, чем создавать ресурсы из них?Спасибо.

1 Ответ

1 голос
/ 29 мая 2011

Я портирую большое приложение PHP на Rails, и у нас довольно мало «специальных» ресурсов, таких как администраторы имеют возможность войти в систему как другой пользователь с их разрешения, чтобы исправить проблемы и т. Д. Явсегда будет жаловаться, что такие функции, как вход в систему под учетной записью других пользователей, не следует объединять в огромные монолитные AdminController как действия loginAsUser и logOutOfUserAccount.В нашем приложении Rails мы стараемся визуализировать как можно больше с точки зрения ресурсов, поэтому, используя только что приведенный пример, у нас есть пространство имен Admin, в котором есть UsersController (/ admin / users /: id) икак подресурс пользователей, у нас есть ресурс UserOverride (/ admin / users /: user_id / override) ... действительно логично, что мы просто POST и DELETE к этому ресурсу.

Возвращаясь к вашему примеру, да, я думаю, вы должны разбить эти разделы на отдельные ресурсы.Похоже, что BookContent должен быть подресурсом Book, а также MarketingOptions.

resources :books do
  resource :content
  resources :marketing_options
end

и т. Д.

С этим работать удобнее (более модульно) и проще визуализировать.от просмотра только маршрутов.Вы также получаете преимущество действительно предсказуемых помощников пути:

<%= link_to("Marketing Options", book_marketing_options_path(@book)) %>

Вы не можете пытаться принудить каждый мыслимый маршрут в идеологию ресурса RESTful ... если кажется, что он принудительный, то, вероятно,.

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

РЕДАКТИРОВАТЬ |Просто перечитал исходный вопрос и хотел уточнить: ресурс! = Строка в базе данных.Ресурс - это все, что вы можете представить как «вещь» ... Я знаю, что это очень широкое утверждение, но точно так же, как объект в ООП не должен представлять что-то конкретное / материал, равно как и ресурс в RESTful-дизайне.

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