Rails: Перевешивают ли преимущества использования маршрутизации на основе ресурсов для создания контроллеров RESTful дополнительную сложность? - PullRequest
1 голос
/ 03 февраля 2010

Я создаю веб-приложение с использованием Rails, и моим первым инстинктом было сделать все контроллеры RESTful. В частности, я использую метод PUT для любых действий, которые изменяют данные.

Но это, кажется, добавляет ненужную сложность для приложения на основе браузера, потому что Rails использует Javascript для переноса URL-адреса в запросе POST.

Во-вторых, это означает, что мне нужно указывать метод всякий раз, когда я создаю ссылку для (нестандартного) действия. Например, когда я добавил «дополнительное» действие в ThingController, мне нужно иметь :method => :put in ...

link_to "Action", things_extra_url(thing), :method => :put

Наконец, кажется, не очень СУХОЕ создание этого отображения для дополнительного действия в rout.rb ...

map.resources :things, :member => { :extra =>:put }

Теперь я должен подумать об определении действия extra в двух местах.

Является ли маршрутизация на основе ресурсов больше предназначенной для создания API-интерфейсов веб-служб, чем логики пользовательского интерфейса? Излишне ли использовать его при создании интерфейса пользователя?

В целом, я согласен с преимуществами, упомянутыми в этой теме - согласованность между контроллерами - это хорошо, а ограничения REST приводят к простым, более чистым конструкциям. Я немного волнуюсь, что принудить некоторые вещи в REST может быть неестественным.

Но я не столько спрашиваю о философии дизайна, сколько интересуюсь, что люди думают об этом компромиссе в Rails. Преимущества перевешивают дополнительную сложность?

1 Ответ

2 голосов
/ 03 февраля 2010

Я бы рекомендовал REST для API веб-сервисов или нет. Мышление с точки зрения ресурсов помогает упростить ваш код и сделать его более понятным. Кодирование по соглашению является мощной концепцией и лежит в основе рельсов. Помогает, что соглашение REST хорошо понимается за пределами рельсов. Конечно, будут исключения, но часто то, что вы считаете исключениями, фактически является их собственными ресурсами. Это сила концепции. Если вы столкнетесь с неудобствами, непременно определите свой собственный маршрут. «Дополнительный» пример, который вы привели, немного сомнительный, я не думаю, что «put» требуется для «членов» Помните, что методы-члены требуют ссылки на существующий ресурс:

link_to "Action", things_extra_url(thing)

Коллекции часто путают с членами, определенными как:

map.resources :things, :collection => { :extra =>:get }

Они не требуют ссылки на существующий ресурс.

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