Rails 3 RESTful дизайн предпочтительнее? - PullRequest
0 голосов
/ 24 апреля 2011

Я довольно новичок в Rails 3, и я пытаюсь понять преимущество разработки приложения RESTful способом.Мне не нужен API / веб-сервис.Не нужно XML или JSON.

Приложение, которое я создаю, вообще не использует CRUD.Это приложение, которое собирает торговые данные через сокетное соединение и отображает их пользователю различными способами.

Я хотел бы визуализировать сделки различными способами, например:

  • Самые последние
  • Самая высокая доходность
  • Сделки по штатам
  • Самые активные сделки
  • Сделки на миллион долларов
  • Сделки, являющиеся облигациями общего назначения
  • и т.д…

В «Rails way» кажется, что у меня будет очень перегруженное индексное действие.Или я мог бы пойти против соглашения и просто создать методы в контроллере сделок, такие как most_recent, Hig__ielding, Most_active и т. Д. Но это, кажется, идет вразрез с философией разработки приложения в Rails 3.

Это просто выглядитИдея RESTful-подхода в Rails основана на CRUD и терпит неудачу, когда CRUD не задействован.Есть ли действительно преимущество в том, что ваше приложение должно быть «RESTful», помимо соблюдения соглашения?Я на самом деле не вижу преимущества здесь.

Плюс, если мне когда-нибудь понадобится API, я бы подумал, что было бы намного лучше разработать API с учетом API.Мой API не будет соответствовать прямому соотношению 1: 1 моего веб-сайта, который предназначен для потребления человеком против компьютера.

Буду признателен за понимание этого.Может я что-то здесь упускаю?

Ответы [ 3 ]

1 голос
/ 24 апреля 2011

У меня есть идея, как это сделать.Код не тестировался, я просто написал его без запуска.

Контроллер:

# trades_controller.rb
def index
  # all scopes defined in model will be allowed here
  # not good idea if you don't want it
  if Trade.scopes.has_key?(params[:scope].to_sym)
    @trades = Trade.send(:params[:scope]) 
  else
    # render error or what you want
  end
end

Модель

# trade.rb
  scope :most_recent, order(:created_at)
  # more scopes

Вид

# index.html.erb
link_to 'Most recent', trades_path(:scope => 'most_recent')
1 голос
/ 24 апреля 2011

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

Идея состоит в том, что у ресурса есть определенные действия. Вы просматриваете ресурс, редактируете его, удаляете и еще что-то. Такие методы, как most_recent (или область действия для этого), должны использоваться в моделях, а не в контроллерах. Затем, если вам нужно использовать эту коллекцию, вам нужно просто вызвать что-то вроде:

@recent_posts = Post.most_recent

в вашем контроллере. Ваши контроллеры не должны иметь много кода, на самом деле никакой бизнес-логики вообще.

RESTful очень хорош, потому что он обрабатывает ресурсы естественным образом. Контроллер должен фактически обрабатывать ресурс. Если вы думаете, что что-то может быть отредактировано или создано, то это должно обрабатываться контроллером.

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

0 голосов
/ 24 апреля 2011

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

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

Все этоне имеет ничего общего с REST.Для получения дополнительной информации о том, почему REST считается хорошей идеей (для некоторых, но не для всех), см. Следующие вопросы и ответы по SO: Почему следует использовать REST вместо Web-сервисов и Что именно является RESTful?программирование .

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