Написание RoR API, вложенного в сайт RoR - PullRequest
1 голос
/ 09 сентября 2011

Просто любопытно, как мне было бы создать Rails API, использующий базовую аутентификацию или ключ API, вложенный в веб-приложение Rails.

Я понимаю создание сайта и API отдельно.Однако я бы хотел, чтобы они были частью одного пакета (из-за отсутствия лучшего термина)

Например, будет ли это работать (структура папок)

\app
\app\controllers
\app\... models views etc
\api\app\controllers
\api\app\.. models views etc

Так что яможет использовать ссылку http:\\localhost\customers\1 или http:\\localhost\api\customers\1

Таким образом, API может быть предоставлен, но использовать ту же модель данных, что и веб-приложение.

Или я ошибаюсь в этой проблемеКстати, и есть, безусловно, лучший способ?

Я использую рельсы 3, если это имеет значение, но больше ищу идею о том, как решить эту проблему.Я не смог найти architecture-overflow.com:)

Ответы [ 3 ]

2 голосов
/ 09 сентября 2011

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

Для каждого ресурса, который мы хотим предоставить через API, мы создали новый контроллер API, который именно это и делает.

Причина этого:

  • . Обработка ошибок между пользовательским интерфейсом и API отличается:
    • Пользовательский интерфейс: перенаправить или нет, и показать информацию мигает
    • API: возвращать четкие коды ошибок и сообщения в формате xml / json
  • код в API в большинстве случаев проще, но обработка ошибок более сложна, посколькупараметры заполняются третьей стороной (больше может пойти не так)
  • код в пользовательском интерфейсе может потребоваться для сбора данных из разных источников для отображения в пользовательском интерфейсе (не чистый ресурс)
  • код более понятен, хотя есть некоторое дублирование

Большая часть дублирования обрабатывается путем повторного использования моделей.Я не совсем уверен, есть ли лучшие способы, но для нас это похоже на хороший подход.

Теперь наш API - это чистый xml, и сейчас мы пытаемся найти чистый способ, позволяющий нашему API отображать xml.и JSON возражает чисто.Все наши модели, представленные в виде ресурсов в API, имеют специальный метод to_xml (который выбирает столбцы, а также отображает ссылки на связанные ресурсы).

Надеюсь, это поможет.

2 голосов
/ 09 сентября 2011

Для этого вы можете использовать функцию маршрутизации пространства имен:

namespace :api do
  resources :customers
end

resources :customers

Это позволит вам отображать каталоги в вашем приложении следующим образом:

app/controllers/customer_controller.rb
app/controllers/api/customer_controller.rb
app/models/customer.rb
app/views/customers/index.html.erb
app/views/api/customers/index.json.erb
... etc ...
0 голосов
/ 26 мая 2014

Вы можете создавать RESTFUL API, как это

  namespace :api, defaults: {format: 'json'} do
    resources :stores do
      collection do
        post :check_token
      end
    end
  end

Теперь вы создаете свои соответствующие контроллеры и представления с вложенной папкой с именем api, как указано выше.

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