Архитектурные лучшие практики - где разместить не-REST действия? - PullRequest
2 голосов
/ 20 июля 2009

Я делаю свое первое настоящее приложение на Rails и изучаю архитектуру REST и то, как она вписывается в приложения на Rails. Похоже, мои контроллеры логически не сопоставляются с отдельным ресурсом, поэтому мне сложно реализовать строгий REST. Например, у меня есть контроллер «каталог», «оформить заказ» и «администратор», а не контроллер «продукты», «категории», «заказы» и «пользователи», хотя это основные ресурсы, используемые в этих контроллерах. Однако каждый из контроллеров делает больше, чем просто REST-действия с ресурсом, все они используют несколько моделей и обслуживают несколько представлений.

Мне не хватает практики проектирования / архитектуры, которая бы позволила REST работать здесь лучше? Контроллеры с пространством имен, возможно, с не-REST-действиями только в контроллере верхнего уровня и REST-действиями в субконтроллерах? Похоже, я столкнулся бы с некоторыми нарушениями СУХОГО ...

Ответы [ 4 ]

2 голосов
/ 20 июля 2009

Если вы хотите таким образом структурировать свое приложение, забудьте о REST и просто наметьте нужные вам маршруты. Если вы на самом деле не хотите управлять ресурсами, зачем беспокоиться?

1 голос
/ 20 июля 2009

Хватит пытаться включить каждый аспект REST в каждое приложение. REST - это архитектура, и она подходит не для всех целей. Если вам нужно какое-то действие RPC, тогда используйте другую форму RPC, а не основанные на ресурсах принципы REST.

Кроме того, схемы именования URL не имеют никакого отношения к тому, является ли ваше приложение RESTful или нет. Это не то, о чем REST. Их приятно иметь, но просто делайте то, что имеет смысл для вашего приложения.

1 голос
/ 20 июля 2009

Если вы посмотрите на спецификацию HTTP здесь вы увидите, что POST можно использовать для следующих целей:

Providing a block of data, such as the result of submitting a
        form, to a data-handling process;

Таким образом, вы можете создать контроллер, который является «процессом обработки данных», и выполнить POST, не нарушая ограничений REST. Если вы называете ресурс существительным, вы можете заставить URL чувствовать себя немного RESTful, но это на самом деле не обязательно. например, * +1008 *

POST /MyStore/CheckoutGirl

Что касается вашего Каталога, я не понимаю, почему это не легко сопоставить. GET / MyStore / Каталог / Предмет / 2324 GET / MyStore / Каталог / SaleItems

Администратор обычно сопоставляет пользователей, роли и т. Д. Там нет ничего нового.

1 голос
/ 20 июля 2009

REST отлично подходит для ресурсов. Действительно болезненно отображать процедуру оформления заказа как спокойный ресурс, и не стоит усилий, лично у меня просто есть 4/5 действий в моем контроллере проверки, и это, кажется, делает работу.

Если вам нужны помощники, вы можете отобразить именованные маршруты

checkout_delivery_path

map.checkout_delivery '/checkout/delivery', :controller => "checkout", :action => "delivery"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...