В чем разница между ActiveResource и ActiveModel?

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

Я пытаюсь создать приложение Rails, которое подключается к RESTful API. Я пытался определить лучший способ сделать это, и из того, что я понимаю, его сузили до создания моей собственной модели с нуля, используя ActiveModel или ActiveResource.

Мне непонятно преимущества / недостатки каждого из них, и, честно говоря, я еще не до конца понимаю разницу между ActiveModel и ActiveResource. Может ли кто-нибудь дать мне представление об этих трех вариантах и ​​что является наиболее "разумным" в обычном контексте? Спасибо!

Лучший ответ не просто сказать "Использовать ActiveModel" или "Использовать ActiveResource" с инструкциями по этому поводу, однако это также будет полезно. Я был бы очень признателен за ответ, объясняющий, почему я должен использовать эту вещь и т. Д.

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

2 ответа

Решение

Поэтому ключ к выбору используемого пакета:

  1. Вы ПОЛУЧАЕТЕ данные из веб-API и хотите хранить / манипулировать на ВАШЕМ сервере, или
  2. Вы манипулируете данными через веб-API и не собираетесь хранить что-либо на своем сервере.

Если # 1, вам понадобится ActiveRecord, так как это пакет Rails для манипулирования и хранения данных в вашей базе данных Postgres/MySQL/etc.

Если # 2, вы можете использовать исключительно ActiveResource, который позволит вам получать данные из веб-API, работать с ним во время выполнения, а затем вносить изменения, отправляя обратно в веб-API.

Однако многие приложения часто используют оба этих пакета. ActiveResource для очень простого захвата данных, а затем применения их к моделям ActiveRecord (таким как "Пользователь" или "Местоположение" и т. Д.), Которые можно использовать локально, без необходимости снова и снова получать данные из API.

В качестве примера, для службы, над которой я работал, я получил данные геолокации из общедоступного источника (просматривая координаты для почтовых индексов), а затем сохранил эти данные в локальных объектах Location с помощью ActiveRecord, чтобы я мог просматривать их повторно без задержки вызова веб-API. (если вы умны, вы будете время от времени обновлять эти данные из веб-API)

Определение того, будет ли ActiveResource работать на вас

Соответствуют ли запросы на обслуживание протоколу документации? Посмотрите, например, на ожидаемый ответ блока в методе Find. Если это так, вам может быть хорошо обойтись без дополнительной работы.

Примечание: документация немного не синхронизирована с журналом изменений - по состоянию на Rails 3.1:

Формат по умолчанию был изменен на JSON для всех запросов. Если вы хотите продолжать использовать XML, вам нужно установить в классе self.format =:xml. например.

Кроме того, ActiveResource был полностью удален из ветки Rails 4.0, поэтому, если вы с нетерпением ждете запуска нового приложения rails и хотите получить самое новое и лучшее, это совсем не вариант - но все надежды не потеряны, есть Есть множество драгоценных камней, которые упрощают взаимодействие с интерфейсами RESTful, например, Фарадей (полное раскрытие: я сам не использовал Фарадея, поэтому могу прокомментировать его эффективность, но я нашел его здесь, и есть ряд других вариантов).

Примечание (по той же ссылке выше): Active Resource построен на стандартном формате XML для запроса и отправки ресурсов по HTTP. Он отражает маршрутизацию RESTful, встроенную в Action Controller, но также будет работать с любой другой службой REST, которая должным образом реализует протокол. REST использует HTTP, но в отличие от "типичных" веб-приложений, он использует все глаголы, доступные в спецификации HTTP.

Если ответ на вышеприведенный ответ отрицательный (он не соответствует), вам нужно написать класс-оболочку, см. В Facebooker пример того, как это делается в активно поддерживаемом геме.

Ссылки: Отличный учебник по ActiveResource

Начало работы с ActiveRecord

Имейте в виду, что если вы только начинаете веб-разработку, вам также необходимо понимать основы баз данных и моделей - у вас есть работа, предназначенная для вас.:)

Я попробую, и, надеюсь, другие придут и исправят (или добавят), так что будет лучшая картина...

Я вижу следующие основные различия между ними:

  • ActiceResource предоставляет интерфейс к ресурсу, который (обычно) доступен удаленно с помощью (Rails) RESTful API. Он не хранится, хранится локально, но читается, обновляется, создается и удаляется только API. Как говорит Райан Бейтс: "ActiveResource позволяет легко обмениваться данными между несколькими приложениями Rails".
  • ActiveRecord (или в настоящее время ActiveModel) хранит свою запись (или модель) в базе данных локально и позволяет другим удаленно обращаться к ней через веб-интерфейс для
    • Показаны страницы
    • Возврат карт JSON или
    • Возврат XML-структур

Преимущества и недостатки

Чтобы использовать ActiveResource, вы должны убедиться, что ваше локальное приложение Rails может общаться с удаленным приложением, чтобы RESTful API был совместимым.

Если оба варианта свободны, вот несколько аргументов:

  • ActiveResource обычно стоит дороже (вызов удаленной системы стоит как минимум больше времени), чем ActiveModel.
  • ActiveModel будет стоить ваших собственных ресурсов (по крайней мере, настройка базы данных), но обычно это не бремя.

Таким образом, в конце концов, это зависит от того, хотите ли вы сохранить что-то (ActiveModel) или только извлечь что-то (ActiveResource), что означает, что вы будете использовать ActiveResource и (возможно) ActiveMiodel.

Другие вопросы по тегам