Come gestire diverse versioni di Restful in un modulo Zend Framework

Ciao ragazzi, ho un prodotto web realizzato con Zend+Doctrine.
Mi e' stato richiesto di implementare un webservice che risponda a delle request effettuate da un'applicazione mobile.
Ho deciso di utilizzare Restful come web service e di creare un modulo opportuno chiamato `api` per gestire le request e le response. 
Allo stato attuale sono riuscito a mettere su un semplice webservice rest:
http://www.domain.it/api/foo/1 dove foo e' il nome del controller.
Ma ora mi chiedo come faccio a gestire diverse versioni nel momento in cui ce ne serviranno?

Si accettano consigli e suggerimenti.

Grazie

inviato 4 anni fa
JellyBelly
X 0 X

Ti basta inserire il numero di versione nell'URL, ad esempio:

http://www.domain.it/api1.0/foo/1
http://www.domain.it/api1.5/foo/1

Diverse API "famose" sono organizzata così.

risposto 4 anni fa
Gianni Tomasicchio
quindi il tuo consiglio e' quello di rinominare il mio modulo attuale api in api1.0 ed ad ogni nuova release creare un nuovo modulo apiX e creare una nuova route rest?JellyBelly 4 anni fa
Ho fatto una prova per verificare la fattibilita' di quello che dici e la cosa non e' fattibile, perche' se chiamo il modulo `api1.0` poi dovrei chiamare il controller `Api1.0_FooController` e questa cosa non se po fa! :SJellyBelly 4 anni fa
Per questi URL non dostresti utilizzare lo Standard Router ma dovresti definire delle Rout personalizzate.Gianni Tomasicchio 4 anni fa
cioe' cosa vorresti dire? Ti potresti spiegare meglio e farmi un esempio per cortesia? grazie!JellyBelly 4 anni fa
@JellyBelly Nello Zend Framework il rapporto che c'è tra gli URL ed i nomi dei moduli, controller e action è determinato dal Router, componente che analizza l'URL e decide quale action chiamare. Di default viene impiegato lo standard router, il cui comportamento è quello a te noto e che effettivamente non ti permetterebbe di fare quanto ti suggerivo. C'è però la possibilità di affiancare altri router che permettono di mappare gli URL con le Action in maniera molto più flessibile. Per farti un'idea puoi guardare quì: http://framework.zend.com/manual/1.12/en/zend.controller.router.htmlGianni Tomasicchio 4 anni fa
Ma io gia' uso le route: uso il caso in cui setto la route per uno specifico modulo: http://framework.zend.com/manual/1.12/en/zend.controller.router.html#zend.rest.route_usage . Mi potresti indicare un caso particolare o un esempio che fa cio' che mi stai dicendo, scusa se insisto ma sono un po confuso a riguardo. GrazieJellyBelly 4 anni fa
@JellyBelly potresti utilizzare il Zend_Controller_Router_Route_Regex per impostare il modulo sempre ad "api" e farti passare il numero che segue la stringa "api" dell'URL come parametro della action. Le altre parti dell'URL continuerebbero a definire controller, action e parametri opzionali.Gianni Tomasicchio 4 anni fa
Ok grazie mille! Ci provero'! ;)JellyBelly 4 anni fa
Altra domanda a riguardo: una volta che ho catturato la versione richiesta come gestisco i diversi controller? Nel senso, all'interno dello stesso modulo api devo creare n controller quanti sono le versioni? tipo Foo1, Foo2 e FooX oppure mi conviene creare n moduli? e con la Zend_Controller_Router_Route_Regex ridirezione al giusto modulo?JellyBelly 4 anni fa
@JellyBelly la scelta è a tua discrezione e dipende da come preferisci suddividere il codice. Se punti a diversi moduli avrai meno controller in ciascun modulo e saranno tutti relativi alla stessa versione delle api.Gianni Tomasicchio 4 anni fa
Questo mi e' chiaro ma io chiedevo un tuo consiglio visto che sei piu' esperto di me! :PJellyBelly 4 anni fa
@JellyBelly io creerei un modulo per ciascuna versione delle apiGianni Tomasicchio 4 anni fa
@GianniTomasicchio grazie per il tuo consiglio! ;)JellyBelly 4 anni fa
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda