Задать вопрос

Можно в Ruby on Rails создать Model с источником данных в виде внешнего RESTful API?

Глупый вопрос, наверное, но всё таки.
Модель в RoR представляет собой описание сущности в БД (как я это понимаю).
В файле модели можно делать собственные методы, которые будут делать прямые запросы к БД и возвращать коллекции данных.
В моём проекте я данные добываю не из БД, а из внешнего RESTful API.
Возможно ли (без костылей) мою реализацию этого API встроить в модель?
Ниже идея, а не реальная реализация.

# controller.rb
def Controller
  Users.all
end


# model.rb
def Model
  def all
    HTTPClient.get 'https://example.com/users.json'
  end
end
  • Вопрос задан
  • 217 просмотров
Подписаться 1 Средний 4 комментария
Решения вопроса 1
@mikhailushka
В том подходе, который вы предлагаете есть проблема с тем, что ваш проект будет почти полностью зависеть от этого источника данных.

Может быть вы могли бы сделать следующее:
Можете написать job который будет по какому то промежутку времени(раз в час или раз в день) подключаться к этому источнику данных, собирать их в кучку так как вам нужно и отправлять в вашу базу данных на вашем сервере.
По сути просто не постоянное подключение к удалённому источнику данных.

Это могло бы быть удобно, если источник данных не ваш и вы не можете на него повлиять(он упадет например)
Но в то же время, если вам важно обрабатывать данные в реальном времени(юзер зарегистрировался и инфа о нем ушла на этот удаленный сервер, а вам после регистрации сразу нужны эти данные - для проверки логина и пароля при входе например) данный подход не подойдет

Тут нужно знать больше о предметной области, может быть, если вам нужно просто 1 раз заполнить данными вашу модель, то удобнее всего было бы это где то в миграции вообще реализовать.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
Ну сделайте обертку вида:
module GetUsers
 def all
    ApiClient.new.all
 end
end


class User
  extend GetUsers
end

User.all

Хотя я бы сделал просто сервис класс и вызывал его в нужном месте типа users = UserService.new.all
Ответ написан
Комментировать
c3gdlk
@c3gdlk
Ментор в http://rubyboost.ru/
Есть специальный гем https://github.com/remiprev/her

Встречал пару лет назад в проекте, довольно удобно. Но, там ребята заморочились и дописали немного кода, чтобы вообще не было разницы где у тебя данные и можно было стандартными конструкциями использовать и обычные модели и эти. Все отношения и много чего еще работало
Ответ написан
Комментировать
@TSobolev
Гем Flexyrest.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы