Parliamo 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!
Per altre informazioni visitate la sezione del nostro blog.