Existe-t-il un moyen facile de renvoyer des données aux clients du service Web dans JSON à l'aide de Rails?Comment exposer des données au format JSON via un service Web utilisant Rails?
Répondre
Voyons voir.
Modèle
class Contact < ActiveRecord::Base
...
end
Routes
map.resources :contacts
contrôleur
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
Donc, cela vous donne une interface API sans la nécessité de définir des méthodes spéciales pour obtenir le type de répondre requis
Par exemple.
/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
Rails monkeypatches la plupart des choses que vous voulez bien sur le point d'avoir une méthode #to_json
.
En haut de ma tête, vous pouvez le faire pour les hachages, les tableaux et les objets ActiveRecord, qui devraient couvrir environ 95% des cas d'utilisation que vous pourriez souhaiter. Si vous avez vos propres objets personnalisés, il est trivial d'y écrire votre propre méthode to_json
, qui peut simplement bloquer les données dans un hachage, puis renvoyer le hachage jsonized.
monkeypatches? Je n'ai aucune idée de ce que cela signifie, mais je pourrais deviner qu'il s'agit de fournir cette méthode à la plupart des objets, sinon tous, –
Il corrige un objet existant, en ajoutant la méthode ou en la modifiant si elle existe. C'est vraiment juste une extension de langage dynamique. –
Il est un plug-in qui fait exactement cela, http://blog.labnotes.org/2007/12/11/json_request-handling-json-request-in-rails-20/
Et d'après ce que je comprends cette fonctionnalité est déjà dans Rails. Mais allez voir ce blog, il y a des exemples de code et des explications. Rails resource donne une interface RESTful pour votre modèle.
ActiveRecord fournit également des méthodes pour interagir avec JSON. Pour créer un JSON à partir d'un objet AR, appelez simplement object.to_json. Pour créer un objet AR à partir de JSON, vous devriez être capable de créer un nouvel objet AR, puis appeler object.from_json .. pour autant que j'ai compris, mais cela n'a pas fonctionné pour moi.
Bonne réponse! Si je peux le mettre à jour vers Rails 3, la méthode json semble maintenant être to_json. Au moins c'est ce qui a fonctionné pour moi ... c'est-à-dire @ contact.to_json – codedog