2010-04-03 8 views
14

Sto provando a creare un'API per la mia applicazione rails utilizzando le risposte JSON ai controller risorse RESTful. Questa è una nuova esperienza per me, quindi sto cercando indicazioni e indicazioni. Per iniziare:Rails 3: Qual è il modo corretto di rispondere alle azioni REST-ful con JSON in rails?

  1. In un'applicazione rails, qual è il modo "corretto" per rispondere con i metodi controller JSON a REST-ful? (crea, aggiorna, distruggi)
  2. Esiste un modo idiomatico per indicare il successo/insuccesso attraverso una risposta JSON?

Ulteriori informazioni:

  • sto attualmente lavorando con le rotaie 3.0.beta2
  • vorrei evitare di utilizzare un plugin o gemma per fare il lavoro sporco, il mio l'obiettivo è ottenere una migliore comprensione di come creare un'API di rails 3.
  • I collegamenti ai luoghi in cui sono riuscito a trovare ulteriori informazioni sull'argomento sarebbero anche apprezzati, alcune ricerche rapide su google non mi hanno fatto molto bene.
+0

Hai capire questa parte: "C'è un modo idiomatico per indicare il successo/insuccesso attraverso una risposta JSON" –

+0

Ultimamente non ho lavorato con i binari, ma da quello che ho visto in altri progetti, un flag booleano nell'oggetto JSON restituito sembra essere il modo più semplice per valutare il successo/l'insuccesso di una chiamata JSON. –

risposta

29
#config/routes.rb 
MyApplicationsName::Application.routes.draw do 
    resources :articles 
end 

#app/controllers/articles_controller.rb 
class ArticlesController < ActionController::Base 

    # so that respond_with knows which formats are 
    # allowed in each of the individual actions 
    respond_to :json 

    def index 
    @articles = Article.all 
    respond_with @articles 
    end 

    def show 
    @article = Article.find(params[:id]) 
    respond_with @article 
    end 

    ... 

    def update 
    @article = Article.find(params[:id]) 
    @article.update_attributes(params[:article]) 

    # respond_with will automatically check @article.valid? 
    # and respond appropriately ... @article.valid? will 
    # be set based on whether @article.update_attributes 
    # succeeded past all the validations 
    # if @article.valid? then respond_with will redirect to 
    # to the show page; if [email protected]? then respond_with 
    # will show the :edit view, including @article.errors 
    respond_with @article 
    end 

    ... 

end 
+0

Esattamente quello che stavo cercando, grazie. Ricordo di aver visto 'respond_with' nella documentazione dei binari, ma per qualche motivo non ha fatto clic. Questo ha aiutato molto, grazie! –

+0

Significa che dobbiamo _need_ fare '<% if @ article.valid? %> 'logica nelle viste? – dazonic

+0

È necessaria la logica nelle viste per verificare se mostrare errori. Ma ho aggiornato la mia risposta con ulteriori informazioni. – yfeldblum