# Dubbi su REST

**URL:** <https://www.ruby-forum.com/t/dubbi-su-rest/158482>\
**Category:** IT\
**Created:** [January 23, 2009, 8:40pm UTC](https://www.ruby-forum.com/t/dubbi-su-rest/158482 "2009-01-23T20:40:57Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![homunculus](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/838e76/32.png) [@homunculus](https://www.ruby-forum.com/u/homunculus)\
**Post date:** [January 23, 2009, 8:40pm UTC](https://www.ruby-forum.com/t/dubbi-su-rest/158482/1 "2009-01-23T20:40:57Z")

</div>

Salve a tutti,

ho deciso tempo fa di imparare ad usare rails “the rest way”, visto che  
mi pare che il team di rails stia davvero spingendo ad utilizzare questo  
metodo.

Devo dire che mi piace come idea in generale, ma ancora mi rimane  
qualche dubbio.

In particolare:

Ho cominciato a creare un’applicazione piuttosto grossa, e solo dopo il  
sistema di gestione degli utenti (che Ã¨ abbastanza articolata) e la  
rispettiva parte amministrativa, mi sono trovato con un file di ruoting  
enorme. Se penso che sono appena all’inizio del progetto la cosa mi  
spaventa non poco. Significa forse che la mia applicazione Ã¨ poco adatta  
ad essere sviluppata con REST, o Ã¨ normale finire con dei file di routes  
enormi? Puo creare problemi di velocitÃ la cosa?

Inoltre: mi capitava spesso prima di passare a REST di creare metodi che  
gestiscono chiamate da link\_to\_remote per riempire dinamicamente parti  
di form per esempio o contenuti dinamici. Ovviamente in alcuni casi si  
tratta di chiamare un’azione standard ed eseguire del codice rispetto a  
respond\_to, ma altre volte non Ã¨ possibile.  
Mi sembra stupido creare un controller separato ogni volta che mi serve  
un metodo del genere, e mi sembra altrettanto stupido creare delle  
routes ad-hoc solo per gestire questi metodi. Come risolvete voi un  
problema simile?

Grazie in anticipo per i chiarimenti

---

<div class="post-metadata">

**Author:** ![homunculus](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/838e76/32.png) [@homunculus](https://www.ruby-forum.com/u/homunculus)\
**Post date:** [January 23, 2009, 8:58pm UTC](https://www.ruby-forum.com/t/dubbi-su-rest/158482/2 "2009-01-23T20:58:13Z")

</div>

probabilmente stai sbagliando a progettare la tua applicazione, poi  
bisogna sempre vedere cosa intendi per enorme, grosso modo dovresti  
avere almeno una definizione per controller(1 riga), di solito si  
tende ad articolare di più le route, forse questo ti potrebbe aiutare,  
nn riduci il codice ma diventa tutto piu chiaro.  
dovresti avere delle routes di questo tipo

map.resources :trips, :member =\> { :itinerary =\> :get, :share  
=\> :post } do |trips|  
trips.resources :geonames, :controller  
=\> :trip\_geonames, :collection =\> { :autocomplete =\> :get }  
end

come vedi puoi specificare molte cose e molti tipi di richiesta, get,  
post, put, delete etc( questo dovrebbe rispondere alla tua seconda  
domanda).

all’ inizio a dir il vero l’ approccio restful nn mi faceva  
impazzire, mi sembrava di scrivere piu roba e incasinare tutto, il  
fatto è che si, crei molti piuù controller, ma penso che proprio  
grazie al fatto di suddividere la logica in un modo così ‘rigido’  
porti ad un codice nettamente più chiaro(leggibile), l’ applicazzione  
ha molto più senso. mi trovo ogni giorno a lavorare su più progetti  
diversi, la maggior parte dei quali non iniziati da me e se non fosse  
per restful passerei ore solo a capire cosa fa quella strana cosa con  
ottimila righe di codice.

ah con restful riesci anche davvero a riutilizzare il codice delle  
viste o cmq il codice in generale, sta tutto nell’ abituarsi a  
ragionare restful.

per quanto riguarda link\_to\_remote ti consiglio prima di tutto di  
usare ujs, cmq quel helper se nn sbaglio nn fa altro che creare una  
form e fare il submit, quindi non vedo quale sia il problema, cosa  
vorresti fare?

Q

On 23 Jan 2009, at 19:40, Simone G. wrote:

> ad essere sviluppata con REST, o è normale finire con dei file di  
> routes  
> enormi? Puo creare problemi di velocità la cosa?

---

<div class="post-metadata">

**Author:** ![homunculus](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/838e76/32.png) [@homunculus](https://www.ruby-forum.com/u/homunculus)\
**Post date:** [January 23, 2009, 9:24pm UTC](https://www.ruby-forum.com/t/dubbi-su-rest/158482/3 "2009-01-23T21:24:27Z")

</div>

Grazie per la tua risposta veloce.  
Il vero problema non sono tanto le azioni ad-hoc come mi hai giustamente  
mostrato, ma proprio il fatto di avere molti controller.  
Esempio:

Per i miei utenti definisco i seguenti controller:

ProfilesController \> Gestisce i profili  
AvatarController \> Gestisce l’upload di avatar nel profilo utente  
ActivationsController \> Gestisce l’attivazione  
PasswordsController \> Gestisce cambio o password dimenticata  
EmailsController \> Gestisce l’update email con attivazione  
StateController \> Gestisce il blocco/sblocco di utenti  
RolesController \> Gestisce i ruoli degli utenti

Ovviamente per ogni controller ho definito la route adatta, con tanto di  
azioni ad-hoc come dal tuo esempio, e questa Ã¨ solo una piccola parte di  
quanto eseguo rispetto agli utenti, perchÃ¨ sono appena all’inizio  
(arriveranno cose come commenti, eventi, posts, iscrizioni, che sono  
risorse di user ma anche risorse generiche dell’applicazione e della  
parte admin).

Se calcoli che tutto questo va definito due volte (perchÃ¨ la stessa  
struttura va riutilizzata nell’admin namespace), direi che c’e’ gia  
molta (troppa?) carne al fuoco in routes.rb .

Per link\_to\_remote, pensa all’azione che deve per esempio rispondere nel  
caso voglio caricare una lista di stati rispetto alla nazione scelta in  
un form. Dovrebbe essere qualcosa tipo: load\_states

---

<div class="post-metadata">

**Author:** ![homunculus](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/838e76/32.png) [@homunculus](https://www.ruby-forum.com/u/homunculus)\
**Post date:** [January 24, 2009, 1:08pm UTC](https://www.ruby-forum.com/t/dubbi-su-rest/158482/4 "2009-01-24T13:08:55Z")

</div>

On 23 Jan 2009, at 20:24, Simone G. wrote:

> Grazie per la tua risposta veloce.  
> Il vero problema non sono tanto le azioni ad-hoc come mi hai  
> giustamente  
> mostrato, ma proprio il fatto di avere molti controller.  
> Esempio:
> 
> Per i miei utenti definisco i seguenti controller:
> 
> ProfilesController \> Gestisce i profili  
> cosa intendi? dovresti usare la /users/show cambiando la vista o al  
> massimo ti fai un methodo users/account o se proprio ci tieni(magari  
> la tua gestione è particolarmente complessa) allora si fai un  
> controller profiles o accounts/
> 
> AvatarController \> Gestisce l’upload di avatar nel profilo utente  
> questo ci vuole.
> 
> ActivationsController \> Gestisce l’attivazione  
> users/activate, restful activation te lo mette gia nel controller,  
> devi solo crearti la route se non sbaglio
> 
> PasswordsController \> Gestisce cambio o password dimenticata  
> puoi metterla nel profilo utente
> 
> EmailsController \> Gestisce l’update email con attivazione  
> sempre parte di user, se non sbaglio sempre restful auth ti crea un  
> observer che invia mail.
> 
> StateController \> Gestisce il blocco/sblocco di utenti  
> activa state machine(asm), è sempre parte di restful auth
> 
> RolesController \> Gestisce i ruoli degli utenti  
> parte del modello utente

come vedi hai a mio avviso qualche errore nella progetazione, dovresti  
capire meglio l’ approccio restful, se ti sistemi ste due cose inizi  
già a vederne i benefici.

> Se calcoli che tutto questo va definito due volte (perchè la stessa  
> struttura va riutilizzata nell’admin namespace), direi che c’e’ gia  
> molta (troppa?) carne al fuoco in routes.rb .

esatto hai un macello di controller con due righe di codice ognuno al  
posto di avere due controller con 8 mila righe, ti garantisco che è  
tutto molto ma molto piu chiaro.

in generale io creo un controller restful per ogni modello facendo  
quansi per tutti la new, create, show update destroy etc, bene o male  
sono operazioni base. poi volendo mi faccio anche altri controller che  
lavorano sugli stessi modelli ma con route diverse, qui è un po più  
complicato(non troppo).

> ## Per link\_to\_remote, pensa all’azione che deve per esempio rispondere nel caso voglio caricare una lista di stati rispetto alla nazione scelta in un form. Dovrebbe essere qualcosa tipo: load\_states
> 
> Posted via [http://www.ruby-forum.com/](http://www.ruby-forum.com/).  
> map.resources :whatever, :collection =\> {:get\_list =\> :get}

dovrebbe fare al caso tuo, collection fa una chiamata senza pretendere  
l’ id dell’ oggetto su cui si dovrebbe basare il controller es /users/  
search è una collection

---

<div class="post-metadata">

**Author:** ![homunculus](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/838e76/32.png) [@homunculus](https://www.ruby-forum.com/u/homunculus)\
**Post date:** [January 24, 2009, 1:15pm UTC](https://www.ruby-forum.com/t/dubbi-su-rest/158482/5 "2009-01-24T13:15:23Z")

</div>

Ricorda anche la scorciatoria

map.resources :photos, :has\_many =\> [:comments, :formats], :has\_one  
=\> [:author]

equivalente a

map.resources :photos do |photos|  
photos.resource :author  
photos.resources :comments  
photos.resources :formats  
end

Quella di fatto di aiuta molto a rendere il routes.rb piu’ leggibile.

---

<div class="post-metadata">

**Author:** ![homunculus](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/838e76/32.png) [@homunculus](https://www.ruby-forum.com/u/homunculus)\
**Post date:** [January 24, 2009, 2:48pm UTC](https://www.ruby-forum.com/t/dubbi-su-rest/158482/6 "2009-01-24T14:48:38Z")

</div>

Andrea C. wrote:

> > ProfilesController \> Gestisce i profili  
> > cosa intendi? dovresti usare la /users/show cambiando la vista o al  
> > massimo ti fai un methodo users/account o se proprio ci tieni(magari  
> > la tua gestione ï¿½ particolarmente complessa) allora si fai un  
> > controller profiles o accounts/  
> > Ho questo controller perchÃ¨ ho un modello UserProfile con relativo  
> > database user\_profiles, e va gestito sepratamaente rispetto all’account.

> > AvatarController \> Gestisce l’upload di avatar nel profilo utente  
> > questo ci vuole.

> > ActivationsController \> Gestisce l’attivazione  
> > users/activate, restful activation te lo mette gia nel controller,  
> > devi solo crearti la route se non sbaglio  
> > Difatti, non mi sto lamentando che devo creare il controller ma che  
> > anche in questo caso si va a inserire una route in piu

> > PasswordsController \> Gestisce cambio o password dimenticata  
> > puoi metterla nel profilo utente  
> > Ha diversi metodi ed ha senso che sia in un controller separato,  
> > altrimenti dovrei specificare 4 azioni ad hoc per la risorsa  
> > user\_profile. Non si tratta solo di cambiare la password, si tratta di  
> > generare un password token, rispedire l’utente al sito controllare il  
> > token e spedirlo a una view dove puo cambiare la password. Certo potrei  
> > fare una sola azione per tutto ma cosi tolgo complessit al controller e  
> > ne aggiungo all’azione, non so cosa Ã¨ peggio.

> > EmailsController \> Gestisce l’update email con attivazione  
> > Non serve ad inviare, ma a cambiare l’email in modo sicuro con  
> > generazione di email token ecc…, anche qui ci sono diversi metodi e  
> > view, difficile integrarlo in un’altro controller

> > StateController \> Gestisce il blocco/sblocco di utenti  
> > activa state machine(asm), ï¿½ sempre parte di restful auth

> > RolesController \> Gestisce i ruoli degli utenti  
> > parte del modello utente  
> > Mi serve una view che gestisce i ruoli per gli utenti e permette di  
> > aggiungerne o toglierne

Non vorrei sepmbrare pesante ma se avessi potute evitare questi  
controller mettendoli sotto altre azioni l’avrei fatto, ma come vedi  
sono abbastanza obbligato ad averli. La cosa in realtÃ non mi crea  
problemi, anzi, Ã¨ solo la questione del file di routing enorme che mi  
preoccupa.
