Yii-logo-transparent-smallParliamo ancora di Yii, il nostro framework preferito (che tra l'altro a breve dovrebbe rilasciare la sua versione 2.0 basata su PHP 5.3 e i namespace!).

Mi è capitato di recente di dover sviluppare un WebService per un applicativo Yii. Seguendo la guida ufficiale tutto è andato liscio e filato, è favolosamente semplice allestire questo tipo di servizio anche in presenza di dati composti. Ad esempio per tornare un modello o un array di modelli, selezionando selettivamente quali campi tornare, è sufficiente aggiungere delle righe di commento standard PHPDoc nello stesso ed effettuare la return della find o findAll. Fantastico!

Nella vita dello sviluppatore però si sà, difficilmente le cose vengono giuste al primo colpo! Così ci si trova a cambiare alcune righe del backend, modificare i campi ritornati per far fronte a nuove esigenze, aggiungere funzioni. Ma nel caso dei WebService questo non sempre si riflette immediatamente sul client, e si passano minuti o decine di minuti a sbattere la testa contro la tastiera cercando di capire perché le modifiche fatte sul server SOAP non vengono viste dal client? La risposta è semplice: cache! Dannatissima ed utilissima cache che in fase di sviluppo può essere molto fastidiosa.

Come risolvere?

Sul client (PHP in questo caso):

 ini_set("soap.wsdl_cache_ttl", '0');
 ini_set("soap.wsdl_cache_enabled", '0');
 $client=new SoapClient('http://localhost/GAWebService');

In questo modo la cache del WebService non verrà mantenuta dal client.

Nel caso di Yii c'è però un'ulteriore problema: modificando i campi esportabili del modello questo non si riflette sul client, sebbene l'XML del WebService venga aggiornato! In questo caso occorre eliminare i file wdsl* nella directory temporanea del webserver, tipicamente /tmp nei sistemi Linux. Questi file contengono la cache della struttura dei dati esportati, costringendi Yii a rigenerarli ci mostrerà finalmente i dati aggiornati!

 

Pochi semplici accorgimenti che spero facciano risparmiare tempo!

We use cookies to improve our website and your experience when using it. Cookies used for the essential operation of this site have already been set. To find out more about the cookies we use and how to delete them, see our privacy policy.

  I accept cookies from this site.
EU Cookie Directive Module Information