Rails REST API вопрос проектирования - PullRequest
2 голосов
/ 11 июля 2010

Я разрабатываю REST API для одного из моих приложений и рассматриваю возможность использования RoR для него, и у меня возникло несколько вопросов, которые мне хотелось бы знать, может ли Rails поддержать, прежде чем я смогу принять решение о RoR -Рельсы поддерживают установку статуса кода ответа HTTP.Поэтому я хочу что-то вроде этого

if customer_save_fail
 response.status_code = 500
end

2) в рельсах, есть ли способ выполнить прямой оператор SQL, я хочу это для сложных запросов и не хочу использовать ActiveRecord.Я предполагаю, что могу использовать гем DBI для этого?Есть ли другой путь?который интегрируется с Rails.Также мне нужен способ конвертировать наборы результатов, возвращаемых прямыми запросами, в JSON, что-то вроде to_json.Могу ли я добиться чего-то подобного с RoR из коробки?

Спасибо всем за ваш вклад.

Ответы [ 2 ]

2 голосов
/ 11 июля 2010

1) Да, в Rails есть сопоставления для кодов состояния HTTP, которые вы можете вызывать из действий вашего контроллера с помощью head (как вариант). См. здесь для списка.

2) Если вы хотите оставаться в приложении SQL или близко к нему, у вас есть параметров в AR или вы можете использовать другой ORM, например Sequel . Примеры более позднего подхода здесь .

ОБНОВЛЕНИЕ: расширение на детали выше

1) Вы можете ответить телом и статусом в вашем действии контроллера. Например.

respond_to do |format|
  format.html
  format.json { render :json => @some_object.to_json, :status => :not_implemented }
end

2) Интерфейс execute является довольно низкоуровневым и возвращает объект результата, который является экземпляром результата вашего конкретного адаптера базы данных. Например, MySQL возвращает MySQL :: Result . Если вам нужно обработать результаты более абстрактно, вы можете взглянуть на оболочки здесь

1 голос
/ 12 июля 2010

1) Да, вы можете такие вещи, как render :text => "response", :status => 500.http://api.rubyonrails.org/classes/ActionController/Base.html#M000464
2) Да, вы можете сделать Model.find_by_sql («sql query»).http://api.rubyonrails.org/classes/ActiveRecord/Base.html#M001781

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