Programmazione.it
Developing with Google App Engine
Recensito da Gianluca Moretti il 05-11-2009 ore 12:03
Copertina ISBN: 9781430218319
Autori: Eugene Ciurana
Editore: Apress
Lingua: Inglese
Anno: 2009
Pagine: 164
Allegati: Nessuno
Intel Cluster Studio XE
Il testo Developing with Google App Engine si propone di illustrare, in maniera semplice ed esaustiva, le caratteristiche della piattaforma di sviluppo di applicazioni web Google App Engine (GAE), un framework potente e ricco di servizi, ma allo stesso tempo di semplice uso, grazie ad API intuitive.

Lo scopo dell'autore è di mostrare nel concreto quanto sia semplice creare applicazioni complete delle tipiche funzionalità, sfruttando gli elementi infrastrutturali che Google di per sé offre, poiché utilizzate per le sue applicazioni, e che con il GAE ha deciso di condividere con la comunità di sviluppatori.

Il titolo fa parte della collana firstPress di Apress, la cui ottica è di approfondire tecnologie innovative, d'avanguardia e di recente uscita, con un distillato di concetti chiave ed esempi diretti. Questo spiega (in parte) la scelta dell'autore di proporre gli argomenti mediante brevi descrizioni, accenni, rimandi, porzioni di esempi, il tutto in sole 150 pagine.

I primi due capitoli sono di carattere introduttivo: descrivono in generale in cosa consiste GAE, soffermandosi in particolare sul concetto di cloud computing e di Platform as a Service (PaaS), dunque di piattaforma che fornisce servizi infrastrutturali, per il supporto alle transazioni e l'autenticazione, scalabile e praticamente sempre disponibile. Nei primi paragrafi, l'autore descrive l'ambiente di sviluppo GAE disponibile al momento della stesura del testo (SDK Python, a cui si è affiancata da poche settimana anche quella Java), mostra praticamente come registrare una propria applicazione GAE e come caricarla online dopo averla sviluppata in locale. Tra le altre cose, viene introdotto il file app.yaml, necessario alla configurazione dell'applicazione, i cui settaggi ricorreranno spesso nel corso dei capitoli.

Dal terzo si apre la serie di capitoli di programmazione, dedicati al design e all'implementazione di applicazioni reali con GAE. L'autore sceglie la strada dell'esempio di applicazione reale, costruita passo dopo passo, nel corso dei capitoli. Nel terzo capitolo, in particolare, ne vengono date le specifiche funzionali, che sono poi le tipiche di un'applicazione web: una pagina di login/registrazione, a cui segue una ricerca di elementi (nella fattispecie segnalibri), l'accesso al dettaglio a scopo consultazione o modifica (modifica del nome del segnalibro, aggiunta di tag), a fianco di una funzionalità di inserimento di un nuovo oggetto, con la navigazione gestita tramite un menu e link tra pagine.

Il capitolo quarto si occupa degli aspetti visuali e interattivi dell'applicazione, dunque dei meccanismi di costruzione del layout dell'applicazione (statici e dinamici), soffermandosi sull'uso del "webapp Framework", con il suo template engine in grado di mappare i dati sui template per produrre le pagine. Nel corso dei paragrafi, l'autore mostra esempi di template gerarchici e di script Python con invocazione dei metodi di rendering. Gli ultimi paragrafi si dedicano invece ai contenuti statici (immagini, favicon, script e CSS), alle modalità di referenziazione e caricamento degli stessi all'interno del GAE (mediante apposite direttive interne all'app.yaml).

Il quinto capitolo è dedicato alla gestione degli utenti, in fatto di login, registrazione, logout, modifica delle preferenze, assegnazione delle credenziali di amministratore, recupero dell'oggetto rappresentativo dell'utente loggato. Frammenti di codice che mostrano i metodi necessari alla navigazione verso le pagine di login/logout si alternano a paragrafi e schemi descrittivi dell'infrastruttura, per la cronaca totalmente poggiata sui servizi di autenticazione, autorizzazione e controllo degli accessi di Google.

Il capitolo sesto è il più corposo del testo ed è dedicato alla gestione della persistenza: nel caso di GAE essa è basata non su un database relazionale bensì sul concetto di Bigtable, di fatto un database object-oriented (OODB) e sulle API Datastore, che ne consentono l'utilizzo. Bigtable è una tecnologia proprietaria Google, rappresentata logicamente da una grande tabella, fisicamente implementata da un array sparso, distribuito su più server, e da appositi metadati. La tecnologia associativa e distribuita porta con sé vantaggi, quali la scalabilità orizzontale e le performance elevate. Dopo una rapida introduzione dei concetti alla base della persistenza, quali entità, proprietà, gruppi di entità, antenati e discendenti, il capitolo affronta il discorso nella pratica, focalizzandosi sull'esempio di applicazione in via di sviluppo. Mediante script di esempio, vengono mostrate le modalità di estrazione, inserimento, aggiornamento e cancellazione di un'entità dalla Bigtable, secono i tre metodi forniti dalle API Datastore: l'uso delle classi GqlQuery (dove GQL sta per Google Query Lanaguage), l'uso delle classi e dei metodi di manipolazione delle entità, l'uso delle classi Query. I tre meccanismi consentono l'accesso al database a diverse granularità. La creazione di relazioni tra entità, la definizione automatica o manuale degli indici e la riproposta di un esempio completo di gestione delle entità nell'ambito provano a chiarire i concetti teorici espressi. La seconda parte del capitolo introduce il tema delle transazioni e le motivazioni per l'uso delle stesse, specie nel contesto di un database ad oggetti, in cui le relazioni sono rappresentate mediante referenze di oggetti. La proposizione di un esempio pratico sull'uso delle transazioni nella trattazione di gruppi di oggetti (in inserimento, modifica e cancellazione) completano un capitolo corposo e alla lettura piuttosto indigesto, forse per l'alta densità di argomenti trattati o anche per la maniera poco fluida di affrontarli tenuta dall'autore.

Il capitolo settimo tratta il delicato tema della sessione di dati e della gestione della cache applicativa, meccanismo necessario alla riduzione delle operazioni ad alto consumo di risorse, quali gli accessi al Datastore. Le applicazioni GAE sono stateless, cosa che impedisce l'uso del tradizionale approccio basato sulla sessione server. Una prima soluzione passa per i cookie, con tutte le tipiche limitazioni del caso. Una soluzione migliore è fornita dalla Memcache, cioè da un servizio che fornisce un meccanismo di salvataggio chiave-valore, univoco grazie all'uso delle proprietà specifiche dell'entità Owner (cioé dell'utente che sta navigando nell'applicazione) e che consente l'emulazione della sessione di navigazione. Il capitolo propone esempi di script di invocazione dei servizi di Memcache, siano essi di recupero, inserimento, modifica o cancellazione dei dati di cache.

Nel successivo e penultimo capitolo, l'ottavo, vengono affrontate in rapida (troppo rapida...) carrellata le altre API che costituiscono il framework GAE: la API Mail, dedicate all'invio dei messaggi mediante l'infrastruttura Gmail, le API Url Fetch, per la comunicazione con altri servizi e host in rete, le API Images, per la gestione delle immagini. Sostanzialmente, i tre argomenti vengono trattati mediante la proposizione di script, che mostrano l'uso standard di ciascun gruppo di classi.

Conclude il volume il capitolo nono, tanto importante per contenuti quanto veloce nella trattazione. Il tema dell'amministrazione dell'applicazione, fondamentale in quanto relativo agli strumenti forniti dalla console di GAE, è affrontato dall'autore mediante l'elencazione delle funzionalità disponibili, rapidamente descritte, e la proposizione degli screenshoot delle stesse: la dashboard, cruscotto che mostra l'attività in runtime dell'applicazione, la sezione dedicata ai log, la console di analisi del Datastore, con tanto di strumenti di interrogazione e di manipolazione dei dati. Un maggiore dettaglio nella trattazione così come un approfondimento delle problematiche che ciascuno strumento può evidenziare o permettere di analizzare/risolvere sarebbero stati graditi.

I riferimenti a fonti bibliografiche e online sono sparsi qua e là nel testo, sotto forma di tip o note di approfondimento. Inoltre, in un'appendice in fondo al testo, l'autore elenca e descrive velocemente altri titoli, più che per indicarli come fonti di informazioni, per suggerirli ai lettori come mezzi di approfondimento.

I sorgenti dei vari esempi proposti sono disponibili al sito personale dell'autore, e non presso la sezione del sito Apress dedicata al volume, come erroneamente indicato.

Il testo non può considerarsi un manuale per lo sviluppo di applicazioni con GAE, ma piuttosto un'utile, seppur per certi versi "sbrigativa", introduzione del framework GAE, in grado di dare una visione d'insieme dei servizi forniti dalla piattaforma. In particolare, l'approccio basato sull'aggiunta graduale di aspetti infrastrutturali all'applicazione reale di esempio risulta valido e di impatto. La lettura del testo, però, deve essere certamente seguita da un'attività di approfondimento su specifici argomenti, mediante l'accesso alle apposite sezioni online fornite da Google, in continuo aggiornamento, o ai molto frequentati forum di sviluppatori.

Pur riferendosi nello specifico allo sviluppo in Python di applicazioni, Developing with Google App Engine può essere utile anche agli sviluppatori Java che volessero avvicinarsi al framework: a livello logico, i servizi offerti sono gli stessi e una panoramica sui pattern più comuni di utilizzo risulta certamente istruttivo.

Tirando le fila, l'opinione personale del testo non è pienamente positiva: la trattazione appare troppo spesso spezzettata, per cui l'intento di descrivere in maniera coerente e chiara il framework per evidenziarne le indubbie potenzialità non è pienamente raggiunto. Il fatto che il testo sia di recente uscita e dunque alla prima stesura può essere un alibi per l'autore, in vista di future eventuali revisioni del volume.
proLa documentazione online di Google è completa, ma indubbiamente manca di continuità e coesione, dunque risulta di difficile consultazione specie per chi, trovandosi alle prime armi, vuole una visione d'insieme del framework e delle funzionalità a disposizione. Il libro va in questa direzione, affiancando sezioni di carattere descrittivo a esempi pratici e logicamente completi, contribuendo a "fare ordine".
controPur riconoscendo l'approccio diretto e smart dell'autore, motivato dall'appartenenza del volume alla collana firstPress, il testo appare un po' troppo sbrigativo e, anche per questo, poco scorrevole. Alcune schede di approfondimento, poste lungo i paragrafi senza un'apparente logica, così come scelte organizzative degli argomenti non troppo coerenti, interrompono la trattazione dell'argomento principe del capitolo, di fatto disturbando il lettore. Sarebbe stata sufficiente una razionalizzazione dei contenuti per migliorare la qualità complessiva dell'opera (anche a costo di togliere approfondimenti non richiesti o così approssimativi da risultare inefficaci).
Copyright Programmazione.it® 1999-2005. Tutti i diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002.