Como exponho dados em formato JSON por meio de um serviço web usando Rails?
-
09-06-2019 - |
Pergunta
Existe uma maneira fácil de retornar dados para clientes de serviços web em JSON usando Rails?
Solução
O recurso Rails fornece uma interface RESTful para o seu modelo.Vamos ver.
Modelo
class Contact < ActiveRecord::Base
...
end
Rotas
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
Portanto, isso fornece interfaces de API sem a necessidade de definir métodos especiais para obter o tipo de resposta necessária
Por exemplo.
/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
Outras dicas
Rails monkeycorrige a maioria das coisas que você gostaria de ter #to_json
método.
Pensando bem, você pode fazer isso para hashes, arrays e objetos ActiveRecord, que devem cobrir cerca de 95% dos casos de uso que você deseja.Se você tiver seus próprios objetos personalizados, é trivial escrever seus próprios to_json
método para eles, que pode simplesmente armazenar dados em um hash e, em seguida, retornar o hash jsonizado.
Existe um plugin que faz exatamente isso,http://blog.labnotes.org/2007/12/11/json_request-handling-json-request-in-rails-20/
E pelo que entendi essa funcionalidade já está no Rails.Mas vá ver aquela postagem do blog, há exemplos de código e explicações.
ActiveRecord também fornece métodos para interagir com JSON.Para criar JSON a partir de um objeto AR, basta chamar object.to_json.PARA criar um objeto AR a partir de JSON, você deve ser capaz de criar um novo objeto AR e então chamar object.from_json.tanto quanto eu entendi, mas isso não funcionou para mim.