Respuesta corta: depende de su servicio JSON.
¿El servicio es RESTful, para empezar? Si es así, estás de suerte. ActiveResource es dead, así que no aconsejaría usarlo, pero el código en sí proporcionaría un buen punto de partida para crear un conjunto de métodos de envoltura como create
y find
para acceder a su API y manipular registros de la misma forma que ActiveRecord crea y consulta registros en el DB. Eso es relativamente fácil si su API es RESTful porque rails is built around RESTful-ness, por lo que la asignación entre los dos se vuelve mucho más limpia.
This article lo resume así:
rieles hace que sea muy fácil de construir servicios Web que siguen los principios descanso y el trabajo igual de bien con los navegadores web y la web programable. De hecho, mucha de esa simplicidad proviene directamente de seguir estos principios. No tuvimos que decirle a nuestro cliente cómo crear, leer, actualizar o eliminar el recurso, todos seguidos del uso de los métodos HTTP adecuados. Todo lo que teníamos que hacer era señalar a nuestro cliente en el lugar correcto.
Si su servicio es no REST, que a juzgar por los comentarios sobre otras cuestiones que creo que es quizás el caso, entonces usted tendrá su trabajo cortado para usted. ActiveModel no hará este trabajo por usted: create
se define en ActiveRecord::Persistence, y find
se define en ActiveRecord::FinderMethods. No están en ActiveModel.ActiveResource puede reproducirlos con bastante facilidad porque hace suposiciones sobre el tipo de servicio con el que interactúa (es decir, que es RESTful, más algunas otras cosas).
Lo que ofrece es ActiveModel todas las otras cosas que hace que los carriles tan útil para tratar con los modelos: el sistema de validación, los métodos de serialización, el seguimiento de los cambios de atributos sucia, devoluciones de llamada (before_save
, after_save
, etc.), traducción/localización, y así. Todas estas funciones son muy útiles, pero aún así te dejan el problema de envolver tus llamadas API.
Así que aquí es lo que yo recomendaría, basado en mi aunque sea una experiencia limitada (ver mi nota final sobre eso):
- En primer lugar, echar un vistazo de cerca a su API y averiguar lo cerca que está de ser Sosegado. Si es no RESTful, tendrá que pensar en cómo solucionar esto para poder tratarlo como un servicio RESTful. Una buena referencia sobre cómo hacerlo es O'Reilly's RESTful Web Services (específicamente el Capítulo 2, "Escritura de clientes del servicio web").
- Cree un envoltorio API que implemente
create
, find
y cualquier otra funcionalidad similar a ActiveRecord que desee tener. Probablemente desee utilizar una gema como Faraday o HTTParty para realizar solicitudes a la API en lugar de trabajar directamente con Net :: HTTP. (Nunca he usado DataMapper, así que no puedo comentar sobre eso.)
- Incluye los elementos de ActiveModel que quieras usar para hacer que tu clase de contenedor sea más parecida a un modelo de rieles: validaciones, serialización, etc. En Rails 4, puedes de hecho incluye todo usando los nuevos barebones ActiveModel::Model.
Eso le ayudará a usar su servicio JSON como modelo de Rails.
Para el registro, mi experiencia en la implementación de este tipo de cosas se limita a crear un contenedor API (en proceso) para acceder a una API XML. El contenedor tiene una clase que incluye validadores de ActiveModel para validar consultas a la API. He encontrado que los validadores de ActiveModel son realmente útiles para garantizar que se acceda correctamente a la API, pero el contenedor solo sirve para obtener registros de la API, no para crearlos o actualizarlos, por lo que la interfaz es mucho más fácil de lo que esperaba. estarás construyendo.
Gracias por una respuesta tan completa. Afortunadamente, el servicio JSON es RESTful, es solo que no responde de la manera esperada por ActiveResource. Evitaré ActiveResource ahora que sé que está muerto y, en su lugar, leeré el artículo de DZone al que te has vinculado. ¡Gracias de nuevo! – gjb
¡Oh, son buenas noticias!En ese caso, la tarea no debería ser demasiado difícil. Aunque no estés usando ActiveResource, puedes intentar echar un vistazo al código para ver cómo funciona. –
En caso de que todavía esté trabajando en esto, algunas otras gemas que pueden ser útiles: https://github.com/filtersquad/api_smith https://github.com/remiprev/her https://github.com/ apotonick/rugido –