¿Cómo expongo datos en formato JSON a través de un servicio web usando Rails?
-
09-06-2019 - |
Pregunta
¿Existe una manera sencilla de devolver datos a clientes de servicios web en JSON utilizando Rails?
Solución
El recurso Rails proporciona una interfaz RESTful para su modelo.Vamos a ver.
Modelo
class Contact < ActiveRecord::Base
...
end
Rutas
map.resources :contacts
Controlador
class ContactsController < ApplicationController
...
def show
@contact = Contact.find(params[:id]
respond_to do |format|
format.html
format.xml {render :xml => @contact}
format.js {render :json => @contact.json}
end
end
...
end
Esto le brinda interfaces API sin la necesidad de definir métodos especiales para obtener el tipo de respuesta requerida.
P.ej.
/contacts/1 # Responds with regular html page
/contacts/1.xml # Responds with xml output of Contact.find(1) and its attributes
/contacts/1.js # Responds with json output of Contact.find(1) and its attributes
Otros consejos
Rails parchea la mayoría de las cosas que te interesarían tener #to_json
método.
En lo que se me ocurre, puedes hacerlo para hashes, matrices y objetos ActiveRecord, que deberían cubrir aproximadamente el 95% de los casos de uso que puedas desear.Si tiene sus propios objetos personalizados, es trivial escribir los suyos propios. to_json
método para ellos, que puede simplemente bloquear datos en un hash y luego devolver el hash jsonizado.
Hay un complemento que hace precisamente esto,http://blog.labnotes.org/2007/12/11/json_request-handling-json-request-in-rails-20/
Y por lo que tengo entendido, esta funcionalidad ya está en Rails.Pero ve a ver esa publicación de blog, hay ejemplos de código y explicaciones.
ActiveRecord también proporciona métodos para interactuar con JSON.Para crear JSON a partir de un objeto AR, simplemente llame a object.to_json.PARA crear un objeto AR a partir de JSON, debería poder crear un nuevo objeto AR y luego llamar a object.from_json.Por lo que tengo entendido, pero esto no funcionó para mí.