В чем разница между ActiveResource и ActiveModel? - программирование
Подтвердить что ты не робот

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

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

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

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

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

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

4b9b3361

Ответ 1

Итак, ключ к выбору пакета для использования здесь:

  • Вы используете RETRIEVING из веб-API и хотите хранить/манипулировать на ВАШЕМ сервере, или
  • Вы выполняете MANIPULATING данные через веб-API и не намерены хранить что-либо на своем сервере.

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

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

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

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

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

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

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

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

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

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

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

Литература: Отличное руководство по ActiveResource

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

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

Ответ 2

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

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

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

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

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

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

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

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