ruby-on-rails-3 activerecord activemodel

ruby on rails 3 - ¿Cuál es la diferencia entre ActiveResource y ActiveModel?



ruby-on-rails-3 activerecord (2)

Como prefacio de esta pregunta: soy nuevo en el desarrollo de Rails (y en el desarrollo web en general), y algunas de mis preocupaciones pueden ser infundadas, por lo que cualquier comentario sería muy útil.

Estoy intentando hacer una aplicación de Rails que se conecte a una API RESTful. He estado tratando de determinar la mejor manera de hacerlo, y por lo que entiendo, se ha reducido a crear mi propio modelo desde cero, utilizando ActiveModel o utilizando ActiveResource.

No está claro para mí las ventajas / desventajas de cada uno, y para ser sincero, todavía no entiendo completamente la diferencia entre ActiveModel y ActiveResource. ¿Alguien puede proporcionarme información sobre estas tres opciones y qué tiene más sentido en un contexto regional? ¡Gracias!

La mejor respuesta no sería simplemente decir "Usar ActiveModel", o "Usar ActiveResource" con instrucciones para hacerlo, sin embargo, eso sería útil también. Realmente agradecería una respuesta explicando por qué debería usar esa cosa, etc.

Algunas de las limitaciones con las que estoy tratando son que necesito usar una clave cuando llamo a la API, y un buen número de llamadas a la API contendrán parámetros adicionales.


Lo intentaré, y espero que otros vengan y lo corrigen (o lo agreguen), para que exista una mejor imagen ...

Veo las siguientes diferencias principales entre los dos:

  • ActiceResource proporciona una interfaz a un recurso que es (normalmente) accesible de forma remota mediante una API RESTful (Rails). No se almacena de forma local, sino que solo se lee, actualiza, crea y borra solo la API. Como lo dice Ryan Bates : "ActiveResource le permite comunicarse fácilmente entre múltiples aplicaciones de Rails".
  • ActiveRecord (o en la actualidad ActiveModel) almacena su registro (o modelo) en una base de datos localmente, y permite que otros accedan a él de forma remota mediante una interfaz web para
    • Mostrando páginas
    • Devolver mapas JSON o
    • Devolución de estructuras XML

Ventajas y desventajas

Para usar ActiveResource, debe verificar que su aplicación Rails local pueda comunicarse con la aplicación remota, de modo que la API RESTful sea compatible.

Si ambas opciones son libres de elegir, aquí hay algunos argumentos:

  • ActiveResource normalmente será más caro (llamar a un sistema remoto cuesta al menos más tiempo) que ActiveModel.
  • ActiveModel costará sus propios recursos (configuración de la base de datos al menos), pero esto normalmente no es una carga.

Entonces, al final, depende de si desea almacenar algo (ActiveModel) o solo recuperar algo (ActiveResource), lo que significa que usará ActiveResource y (tal vez) ActiveMiodel.


Entonces la clave para elegir qué paquete usar aquí es si:

  1. Está RECUPERANDO datos de la API web y quiere almacenar / manipular en SU ​​servidor, o
  2. Está MANIPULANDO datos a través de la API web y no tiene la intención de almacenar nada en su servidor.

Si es # 1 , necesitará ActiveRecord, ya que es el paquete de Rails para la manipulación y el almacenamiento de datos en su base de datos Postgres / MySQL / etc.

Si es # 2 , puede usar ActiveResource exclusivamente, lo que le permitirá recuperar datos de la API web, trabajar con ella en tiempo de ejecución y luego realizar cambios mediante la publicación de nuevo en la API web.

Muchas aplicaciones, sin embargo, a menudo usarán ambos paquetes. ActiveResource para capturar datos muy fácilmente y luego aplicarlo a los modelos de ActiveRecord (como Usuario, o Ubicación, etc.) que puede usar localmente sin tener que tomar datos de la API una y otra vez.

Para darte un ejemplo, para un servicio en el que estaba trabajando agarré datos de Geolocalización de una fuente pública (buscando coordenadas para códigos postales), luego guardé esos datos en objetos Locales Locales usando ActiveRecord para poder buscarlos repetidamente sin la demora de la llamada a la API web. (si eres inteligente, actualizarás estos datos de la API web de vez en cuando)

Determinar si ActiveResource funcionará para usted

¿Las solicitudes de servicio se ajustan al protocolo de documentación ? Mira el Espera una respuesta de bloqueo en el método Find, por ejemplo. Si es así, podría ser bueno ir sin trabajo adicional.

Nota: La documentación está un poco fuera de sincronización con el registro de cambios - a partir de Rails 3.1:

El formato predeterminado ha sido cambiado a JSON para todas las solicitudes. Si desea continuar utilizando XML, deberá establecer self.format =: xml en la clase. p.ej.

Además, ActiveResource se ha eliminado por completo de la rama de Rails 4.0, por lo que si está esperando iniciar una nueva aplicación de rieles y desea lo último y mejor, esta no es una opción en absoluto , pero no se pierde la esperanza, existe hay muchas gemas que hacen que interactuar con interfaces RESTful sea más simple, como Faraday (revelación completa: no he usado faraday por mi mismo así que realmente puedo comentar sobre su eficacia, pero lo encontré aquí , y hay una serie de otras opciones.

Nota (desde el mismo enlace arriba): Active Resource se basa en un formato XML estándar para solicitar y enviar recursos a través de HTTP. Refleja el enrutamiento RESTful integrado en Action Controller, pero también funcionará con cualquier otro servicio REST que implemente adecuadamente el protocolo . REST usa HTTP, pero a diferencia de las aplicaciones web "típicas", hace uso de todos los verbos disponibles en la especificación HTTP.

Si la respuesta a lo anterior es no (no se ajusta), tendrá que escribir una clase contenedora; consulte Facebooker para ver un ejemplo de cómo se hace en una gema mantenida activamente.

Referencias: gran tutorial sobre ActiveResource

Comenzando con ActiveRecord

Tenga en cuenta que, si recién está comenzando el desarrollo web, también deberá comprender los conceptos básicos de la base de datos y del modelo: tiene su trabajo recortado para usted. :)