Zend Framework ed i Web Service
Introduzione a Zend Framework ed I componenti per I web service
Simone [email protected]
phpDay 2008Rimini, 23/24 Maggio 2008
Due parole di presentazione
• Technical Manager in Altura Labs Srl (www.alturalabs.com)
• Zend Framework contributor (weppos)
• Membro dell’RSS Advisory Board (www.rssboard.org)
• Autore per HTML.it– Edit– PHP, Ruby, ASP, XML, WebMarketing, Database, Server– ICTv.it
• Autore Zend Framework IT (www.zend-framework.it)
23 Maggio 2008 2phpDay 2008 - Simone Carletti
Contenuti
• Introduzione ai framework• Introduzione a Zend Framework e caratteristiche• Zend Framework ed i Web Service
1. Client per web service2. Componenti per sfruttare i web service3. Componenti per sviluppare i web service4. Componenti a supporto
23 Maggio 2008 3phpDay 2008 - Simone Carletti
Note per gli Esempi
• Per questioni di leggibilità, questa presentazione riporta solo frammenti degli script realizzati come esempio
• Gli script sono disponibili in un pacchetto chiamato phpday2008.tgz, scaricabile dal mio sito o dal sito www.phpDay.it
• Leggere il file README contenuto all’ìnterno del pacchetto prima di procedere. Il significato di ogni script è riportato in breve in questa presentazione, alla voce Esempi: che segue un componente
• Non trovi il file phpday2008.tgz? Scrivimi a [email protected] !
23 Maggio 2008 4phpDay 2008 - Simone Carletti
I framework
• Che cos’è un framework?– Collezione di librerie– Raccolta di strumenti
• Perchè un framework?– Aumento della produttività– Soluzioni già pronte ai problemi comuni– Manutenzione del software– Uniformità e standard– Lo sviluppo è più divertente!
23 Maggio 2008 5phpDay 2008 - Simone Carletti
Chi non usa un framework si riconosce subito!
23 Maggio 2008 6phpDay 2008 - Simone Carletti
Zend Framework
• Web Framework Open Source (Licenza New BSD)• Scritto in PHP 5 Object Oriented (PHP 5.1.4)• Promosso da Zend Technologies• Oltre 100 contributors attivi
• http://framework.zend.com/• www.zend-framework.it (non ufficiale)
23 Maggio 2008 7phpDay 2008 - Simone Carletti
Elementi Zend Framework
• Model-View-Controller (MVC)– Zend_Controller, Zend_View, Zend_Layout, Zend_Form…
• Database– Zend_Db, Zend_Db_Table
• Internazionalizzazione (i18n) e Localizzazione (l10n)– Zend_Date, Zend_Locale, Zend_Measure, Zend_Translate
• Autenticazione, Autorizzazione e Gestione delle Sessioni – Zend_Acl, Zend_Authentication, Zend_Session
• E-mail, Formati e Ricerca– Zend_Json, Zend_Pdf, Zend_Mail, Zend_Mime, Zend_Search_Lucene
23 Maggio 2008 8phpDay 2008 - Simone Carletti
Elementi Zend Framework
• Infrastruttura Core– Zend_Cache, Zend_Config, Zend_Console_Getopt, Zend_Log, Zend_Memory– Zend_Debug, Zend_Environment, Zend_Loader, Zend_Registry, Zend_Version– Zend_Filter, Zend_Validate
• Web and Web Services– Zend_Feed, Zend_Rest_Client, Zend_Service,
Zend_XmlRpc_Client, Zend_Gdata, Zend_Http_Client,– Zend_Uri
23 Maggio 2008 9phpDay 2008 - Simone Carletti
Zend Framework e Web Service
1. Client per web service– Set di client pronti all’uso per interagire con i principali web service
come Yahoo, Amazon, Technorati, Gdata...
2. Componenti per sfruttare web service– Librerie e strumenti per interagire con dei web service esistenti
3. Componenti per sviluppare web service– Librerie e strumenti per sviluppare web service
4. Componenti aggiuntivi a supporto– Librerie aggiuntive utilizzabili a supporto per lo scambio e la
validazione dei dati, come URI e Date
23 Maggio 2008 10phpDay 2008 - Simone Carletti
1. Client per web service
• Zend_Service_Akismet– http://framework.zend.com/manual/en/zend.service.akismet.html
– Esempi:• verifykey.php – verifica se l’API_KEY fornita è valida.• isspam.php – legge il file isspam.yml e per ogni commento interroga
Akismet per individuare se si tratta di Ham or SPAM.
23 Maggio 2008 11phpDay 2008 - Simone Carletti
1. Client per web service
<?php
require_once dirname(__FILE__) . '/../helper.php';require_once 'Zend/Service/Akismet.php';
$blog = 'http://www.simonecarletti.com/blog';$akismet = new Zend_Service_Akismet(AKISMET_API_KEY, );if ($akismet->verifyKey()) { echo "Key is valid.\n";} else { echo "Key is not valid\n";}
verifykey.php
23 Maggio 2008 12phpDay 2008 - Simone Carletti
1. Client per web service… // see original file
// load comment fixtures from yaml file$file = dirname(__FILE__) . '/isspam.yml';$comments = Spyc::YAMLLoad($file);
// create a new Zend_Service_Akismet instance$akismet = new Zend_Service_Akismet(AKISMET_API_KEY, 'http://www.simonecarletti.com/blog');
// batch check commentsecho "Starting batch: " . count($comments) . " comment(s) to check from $file";echo "\n";
foreach ($comments as $comment) { echo "\nChecking comment from {$comment['comment_author']} …"; $spam = $akismet->isSpam($comment); … // see original file echo "\n Akismet: " . ($spam ? 'spam' : 'ham'); echo "\n";}
… // see original file isspam.php
23 Maggio 2008 13phpDay 2008 - Simone Carletti
1. Client per web service
• Zend_Service_Delicious– http://framework.zend.com/manual/en/zend.service.delicious.html
– Esempi:• recent.php – interroga del.icio.us e restituisce i 15 bookmark più recenti
salvati dall’utente.
23 Maggio 2008 14phpDay 2008 - Simone Carletti
1. Client per web service
<?php
require_once 'Zend/Service/Delicious.php';
$delicious = new Zend_Service_Delicious(USERNAME, PASSWORD);$posts = $delicious->getRecentPosts();
echo "Found " . count($posts) . " post(s)\n";echo "\n";
foreach ($posts as $index => $post) { echo "$index.\n"; echo " Title: {$post->getTitle()}\n"; echo " Url: {$post->getUrl()}\n"; echo " Desc: {$post->getNotes()}\n";} recent.php
23 Maggio 2008 15phpDay 2008 - Simone Carletti
1. Client per web service
• Zend_Service_Technorati– http://framework.zend.com/manual/en/zend.service.technorati.html
– Esempi:• userinfo.php – recupera da Technorati le informazioni relative ad un dato
username.• userinfo.cli.php – versione modificata dell’esempio precedente, da
avviare via command line.• userinfo-yml.cli.php – versione modificata dell’esempio precedente,
stampa un output compatibile con le specifiche YAML per dimostrare come è possibile interagire con altri linguaggi, ad esempio Ruby.
23 Maggio 2008 16phpDay 2008 - Simone Carletti
1. Client per web service
• Zend_Service_Amazon• Zend_Service_Audioscrobbler• Zend_Service_Flickr• Zend_Service_Nirvanix• Zend_Service_Simpy• Zend_Service_Slideshare• Zend_Service_StrikeIron• Zend_Service_Yahoo• Zend_Gdata
23 Maggio 2008 17phpDay 2008 - Simone Carletti
2. Componenti per sfruttare web service
• Zend_Feed– http://framework.zend.com/manual/en/zend.feed.html
– Esempi:• read.php – legge e stampa a video il contenuto di un determinato feed.
23 Maggio 2008 18phpDay 2008 - Simone Carletti
2. Componenti per sfruttare web service<?php
require_once 'Zend/Feed.php';
// Fetch the latest poststry { $feed = Zend_Feed::import('http://www.zend-framework.it/feed'); // loop all items foreach($feed as $index => $item) { echo "$index.\n"; echo " Title: {$item->title()}\n"; echo " Link: {$item->link()}\n"; echo " Desc: {$item->description()}\n"; echo "\n"; } } catch (Zend_Feed_Exception $e) { echo "Aaaargh! The script crashed: " . $e->getMessage();}
read.php
23 Maggio 2008 19phpDay 2008 - Simone Carletti
2. Componenti per sfruttare web service
• Zend_Http_Client– http://framework.zend.com/manual/en/zend.http.client.advanced.html
– Esempi:• client.php – un semplice client HTTP per leggere il contenuto di un URL.• sitestatus.cli.php – un semplicissimo script per verificare lo status di una
lista di siti web, salvati in un file YAML. Restituisce un output compatibile con YAML contenente le informazioni sullo status di ogni sito interrogato.
23 Maggio 2008 20phpDay 2008 - Simone Carletti
2. Componenti per sfruttare web service
• Zend_Rest_Client– http://framework.zend.com/manual/en/zend.rest.client.html
• Zend_XmlRpx_Client– http://framework.zend.com/manual/en/zend.xmlrpc.client.html
23 Maggio 2008 21phpDay 2008 - Simone Carletti
3. Componenti per sviluppare web service
• Zend_Rest_Server– http://framework.zend.com/manual/en/zend.rest.server.html
• Zend_XmlRpc_Server– http://framework.zend.com/manual/en/zend.xmlrpc.server.html
• Zend_Http_Server• Zend_Soap_Server
23 Maggio 2008 22phpDay 2008 - Simone Carletti
4. Componenti a supporto
• Zend_Uri– http://framework.zend.com/manual/en/zend.uri.html
– Esempi:• validate.php – stampa a video il risultato della validazione di un URL• parser.cli.php – esegue il parsing di un URL in input e stampa un output
compatibile con YAML contenente ogni frammento dell’URL, per dimostrare la possibilità di interazione tra PHP ed altri linguaggi.
23 Maggio 2008 23phpDay 2008 - Simone Carletti
4. Componenti a supporto
<?php
require_once 'Zend/Uri.php';
$url = 'http://www.simonecarletti.com/';
echo "Validating `$url`: ";echo Zend_Uri::check($url) ? "valid" : "invalid";echo "\n";
validate.php
23 Maggio 2008 24phpDay 2008 - Simone Carletti
4. Componenti a supporto
• Zend_Date– http://framework.zend.com/manual/en/zend.date.html
• Zend_Locale– http://framework.zend.com/manual/en/zend.locale.html
• Zend_Currency– http://framework.zend.com/manual/en/zend.currency.html
• Zend_Measure– http://framework.zend.com/manual/en/zend.measure.html
23 Maggio 2008 25phpDay 2008 - Simone Carletti