Si dovrebbe dichiarare tipi di risposta alternativi (ad es. JSON) nelle azioni del controller Rails anche se non li utilizzano?

2

Basta chiedersi quale sia la convenzione accettata per la progettazione del controller Rails. Attualmente, tutti i controller della mia app che ho scritto sono configurati per inviare una risposta JSON quando necessario. Il fatto è che utilizzo sempre solo risposte HTML nella mia app. Quindi è una buona idea averli definiti?

Ad esempio:

def show
  @dog = Dog.find(params[:id])

  respond_to do |format|
    format.html
    format.json { render json: @dog } # needed?
  end
end

Rende il codice del controller meno leggibile (perché più LOC) e significa anche che devo riflettere profondamente su quale dovrebbe essere una buona risposta JSON quando si utilizza HTML non in uso, quindi diminuisce la velocità di sviluppo del mio controller. Questo è particolarmente vero quando hai delle risposte condizionali.

Ad esempio:

def create
  @dog = Dog.new(params[:dog])

  respond_to do |format|
    if @dog.save
      format.html { redirect_to @dog }
      format.json { render json: @dog, status: :created, location: @dog }
    else
      format.html { render action: "new" }
      format.json { render json: @dog.errors, status: :unprocessable_entity }
    end
  end
end

L'unico aspetto positivo che posso vedere è che è "a prova di futuro" i controllori (ad esempio se ho bisogno di risposte JSON in seguito, sono già stati scritti).

Ma se sto scrivendo risposte JSON solo perché allora con la stessa logica potrei scrivere anche risposte XML (cioè format.xml ) ...

    
posta XåpplI'-I0llwlg'I - 11.01.2013 - 03:59
fonte

1 risposta

3

dato che è banale aggiungere in seguito risposte json (o xml, ecc.), raccomanderei di non implementarle prima.
le tue ragioni sono valide:

  • è meno leggibile
  • hai più LOC e quindi più codice da mantenere, più potenziali bug
  • passi il tempo a scrivere codice che non ti serve

più:

  • rischi di esporre attributi che non sono intesi per essere apertamente accessibili

non esiste alcuna convenzione RoR affinché tutte le azioni rispondano a json.

    
risposta data 11.01.2013 - 07:37
fonte

Leggi altre domande sui tag