В чем разница между ActiveResource и ActiveModel?
В качестве предисловия к этому вопросу: я новичок в разработке Rails (и веб-разработке в целом), и некоторые из моих опасений могут быть необоснованными, поэтому любые отзывы будут очень полезны.
Я пытаюсь создать приложение Rails, которое подключается к RESTful API. Я пытался определить лучший способ сделать это, и из того, что я понимаю, его сузили до создания моей собственной модели с нуля, используя ActiveModel или ActiveResource.
Мне непонятно преимущества / недостатки каждого из них, и, честно говоря, я еще не до конца понимаю разницу между ActiveModel и ActiveResource. Может ли кто-нибудь дать мне представление об этих трех вариантах и что является наиболее "разумным" в обычном контексте? Спасибо!
Лучший ответ не просто сказать "Использовать ActiveModel" или "Использовать ActiveResource" с инструкциями по этому поводу, однако это также будет полезно. Я был бы очень признателен за ответ, объясняющий, почему я должен использовать эту вещь и т. Д.
Некоторые ограничения, с которыми я сталкиваюсь, заключаются в том, что мне нужно использовать ключ при вызове API, и большое количество вызовов API будет содержать дополнительные параметры.
2 ответа
Поэтому ключ к выбору используемого пакета:
- Вы ПОЛУЧАЕТЕ данные из веб-API и хотите хранить / манипулировать на ВАШЕМ сервере, или
- Вы манипулируете данными через веб-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
Имейте в виду, что если вы только начинаете веб-разработку, вам также необходимо понимать основы баз данных и моделей - у вас есть работа, предназначенная для вас.:)
Я попробую, и, надеюсь, другие придут и исправят (или добавят), так что будет лучшая картина...
Я вижу следующие основные различия между ними:
- ActiceResource предоставляет интерфейс к ресурсу, который (обычно) доступен удаленно с помощью (Rails) RESTful API. Он не хранится, хранится локально, но читается, обновляется, создается и удаляется только API. Как говорит Райан Бейтс: "ActiveResource позволяет легко обмениваться данными между несколькими приложениями Rails".
- ActiveRecord (или в настоящее время ActiveModel) хранит свою запись (или модель) в базе данных локально и позволяет другим удаленно обращаться к ней через веб-интерфейс для
- Показаны страницы
- Возврат карт JSON или
- Возврат XML-структур
Преимущества и недостатки
Чтобы использовать ActiveResource, вы должны убедиться, что ваше локальное приложение Rails может общаться с удаленным приложением, чтобы RESTful API был совместимым.
Если оба варианта свободны, вот несколько аргументов:
- ActiveResource обычно стоит дороже (вызов удаленной системы стоит как минимум больше времени), чем ActiveModel.
- ActiveModel будет стоить ваших собственных ресурсов (по крайней мере, настройка базы данных), но обычно это не бремя.
Таким образом, в конце концов, это зависит от того, хотите ли вы сохранить что-то (ActiveModel) или только извлечь что-то (ActiveResource), что означает, что вы будете использовать ActiveResource и (возможно) ActiveMiodel.