Download Documentazione FAQ Aiutaci!!!

Zope: dalle pagine web alle applicazioni web

David Biadene  ( bdave at f2s.com )
Michele Campeotto  ( micampe at f2s.com )

Università di Padova
Diploma in Ingegneria Informatica
Corso di Sistemi di Elaborazione
a.a. 2000/2001

Sommario:

Introduzione ai concetti principali e alle caratteristiche tecniche più importanti di Zope, un application server completamente ad oggetti progettato in modo fornire la massima flessibilità e potenza di sviluppo per siti web che richiedono la collaborazione di più persone e una gestione curata ed efficente della sicurezza.


Indice

Introduzione

Ormai Internet, nella sua forma più conosciuta, il Web, è entrata a far parte della vita di moltissime persone. Molte delle attività umane sono state radicalmente modificate da questo potente strumento: si pensi per esempio alla possibilità di fare acquisti in qualsiasi parte del mondo o di partecipare alle attività di borsa senza muoversi di un passo da casa o dall'ufficio.

Anche lo strumento stesso però si è dovuto evolvere dalla sua forma iniziale per poter permettere questa grande varietà d'uso, e continuerà a farlo man mano che nasceranno nuove esigenze e nuovi modi di affrontare vecchi problemi.

Passato: le pagine web

La prima forma con cui si presentò il web, il modo in cui i suoi ideatori lo mostrarono al mondo, era una collezione di documenti (soprattutto scientifici), del tutto simili a quelli stampati.

Il web era semplicemente un modo di poter condividere istantaneamente e a basso costo le esperienze e i risultati con tutte le comunità scientifiche del mondo.

Presente: le pagine dinamiche

Man mano che l'uso del web si intensificava e si desideravano pubblicare sempre più documenti si presentò un problema: se i risultati di un esperimento cambiavano o se venivano aggiunti nuovi dati, era necessario riscrivere tutti i documenti su cui l'esperimento e i dati erano riportati.

La soluzione scelta era quella più ovvia per i ricercatori: ``abbiamo un computer che può fare automaticamente delle operazioni che per noi sono tediose, facciamo generare i documenti al computer''. In questo modo nacquero i CGI (Common Gateway Interface) che poi si evolsero trasformandosi in linguaggi di scripting lato server.

Questi, usando modelli di documento e regole di presentazione definite all'interno dei documenti stessi, generano le pagine che l'utente potrà vedere attingendo direttamente alle fonti dei dati, evitando di dover aggiornare sia i dati, sia i documenti.

Sfruttando le possibilità dei linguaggi server side si cominciano a costruire siti sempre più complessi che permettono di interagire con i documenti e di richederne versioni personalizzate a seconda delle proprie esigenze.

Futuro: le applicazioni web

L'evoluzione delle pagine dinamiche non si è più fermata ed ora sono talmente complesse e potenti che permettono di costruire siti che funzionano come se fossero delle applicazioni vere e proprie, dei programmi che le persone usano per svolgere il proprio lavoro.

Gli esempi sono facili da trovare. Sul web ora si può: leggere la posta, consultare notizie su argomenti scelti dall'utente, discutere di queste notizie con altre persone o collaborare a progetti con persone di tutto il mondo.

La realtà

In realtà le situazioni descritte non seguono un ordine nettamente cronologico, infatti tutti e tre gli approcci sono ancora validi ed ampiamente utilizzati. E' necessario saper individuare quale di questi utilizzare per ogni caso specifico, non avrebbe senso utilizzare strumenti più potenti di ciò di cui si ha effettivamente bisogno, senza pensare alla possibilità che essi introducano complessità non necessarie o addirittura dannose.

Cos'è Zope?

In termini tecnici Zope è un framework per costruire applicazioni web: applicazioni che usano il web per presentare la loro interfaccia utente, permettendo di utilizzarle con la stessa facilità del web stesso, perché in effetti sono quasi indistinguibili da esso. In termini più pratici è un prodotto che aiuta nella creazione, nella gestione e nel servizio di complessi siti dinamici.

Cosa fornisce Zope?

Zope è costituito da più moduli che interagiscono tra di loro per fornire i servizi appena spiegati:

Un server web
Zope contiene già un server web in grado di supportare tutte le funzionalità necessarie al servizio delle applicazioni sviluppate. Se però si ha la necessità di utilizzare un altro server web (ad esempio per problemi di prestazioni o perchè si desiderano fornire anche altri servizi) Zope dà la possibilità di sostituire facilmente il server web interno con uno qualsiasi che supporti l'interfaccia CGI o FastCGI.
Un database ad oggetti
La grande differenza tra Zope e prodotti analoghi è il fatto che Zope ha trasformato il Web in una struttura ad oggetti (Zope significa: Z Objects Publishing Environment) e quindi contiene al suo interno un database ad oggetti nel quale verranno immagazzinati gli oggetti che compongono le applicazioni che devono essere servite.
Un'interfaccia di amministrazione
Zope fornisce una completa interfaccia utente che può essere utilizzata per la gestione e lo sviluppo delle applicazioni. L'interfaccia può essere usata da qualsiasi browser web moderno e si presenta in modo molto familiare agli utenti, visualizzando la gerarchia degli oggetti tramite una struttura ad albero, in modo simile a come i più diffusi file manager ci hanno abituato a vedere il nostro filesystem.




Integrazione con database relazionali
I dati necessari alle applicazioni possono essere memorizzati direttamente nel database ad oggetti di Zope ma, come nel caso del server web, ciò non è necessario. E' infatti possibile sostituire il database ad oggetti con un qualsiasi DBMS relazionale per il quale sia disponibile un driver ODBC.








Linguaggi di scripting
Zope mette a disposizione linguaggi diversi per sviluppare le diverse parti delle applicazioni: per lo sviluppo dei modelli di presentazione dei documenti si può utilizzare DTML, un linguaggio a tag simile all'HTML che ne espande le possibilità permettendo di accedere agli oggetti di Zope. Per lo sviluppo della logica applicativa si ha addirittura la possibilità di scegliere tra due linguaggi: Python (che è il linguaggio nativo di Zope, essendo anche quello con cui viene sviluppato) oppure Perl, ma è possibile che in futuro qualcuno desideri aggiungere il supporto per altri linguaggi, ad esempio Lua, LISP o, perché no, C# (è da notare che Zope è un prodotto Open Source, quindi la sua evoluzione seguirà i desideri degli utilizzatori, e non di Digital Creations, la casa produttrice). Per l'accesso ai database, infine si può usare SQL, che è di fatto lo standard per questo tipo di applicazioni.

Architettura di Zope

E' da notare come l'architettura di Zope sia contenuta in unico blocco modulare nel quale è possibile sostituire ognuno degli elementi (tranne ovviamente Zope stesso) con altri elementi equivalenti esterni, grazie all'utilizzo di standard diffusi e ben conosciuti per l'interfacciamento con l'esterno.

Questo modo di costruire un'architettura fornisce due grandi vantaggi all'utente:





Scalabilità di Zope: ZEO

Quando le dimensioni delle applicazioni aumentano, il problema del carico si presenta sempre, non importa quali tecniche siano state adottate, né quali prodotti si stiano utilizzando.

Il problema della scalabilità verso l'alto di Zope è affrontato da ZEO: Zope Enterprise Objects.

ZEO permette di fornire un'applicazione che in realtà è distribuita su più macchine diverse riservando ognuna di esse ad un compito preciso, in modo da facilitare l'amministrazione del sistema e consentendo di applicare complesse politiche di bilanciamento del carico. Esso è semplicemente un'applicazione che si occupa di coordinare il funzionamento di varie istanze di Zope in esecuzione su macchine diverse: riceve le richieste degli utenti e le inoltra alla macchina che può fornire un risultato nel modo più efficiente possibile.

ZEO ha anche un'altra importante caratteristica: è in grado di operare in modalità di alta affidabilità: esso può gestire anche macchine ridondanti (che eseguono lo stesso compito) in modo da riuscire a fornire un servizio continuo anche in caso di guasti a qualcuno dei nodi dell'applicazione.

Cosa può fare Zope?

Dopo aver discusso delle caratteristiche tecniche di Zope, passiamo ad analizzare come può semplificare lo sviluppo di applicazioni web. Zope fornisce tre servizi principali per lo sviluppo di applicazioni web: potente gestione della collaborazione, gestione ed organizzazione dei contenuti e componenti web.

Gestione della collaborazione

Zope include una gestione degli utenti separata da quella del sistema operativo su cui sta funzionando, separando le funzioni del web server da quelle del sistema, aumentando notevolmente la sicurezza e l'affidabilità globale (anche se le password di accesso a Zope vengono scoperte, esse non possono in alcun modo permettere l'accesso al sistema operativo).

Questa tecnica di amministrazione degli utenti permette una gestione molto flessibile dei compiti assegnati ad ognuno degli sviluppatori. E' infatti possibile assegnare a diversi gruppi (Web design, sviluppo delle applicazioni, progetto delle basi di dati, ...) il controllo di diverse sezioni dell'applicazione, con l'assicurazione che sarà il sistema a fare in modo che essi non interferiscano tra loro.

Tutte le operazioni che vengono eseguite sul database di Zope sono trattate come transazioni e anche le modifiche vengono registrate all'interno del database, permettendo la protezione dagli errori in fase di sviluppo (potendo in qualsiasi momento annullare una qualsiasi delle operazione eseguite in precedenza) e la gestione delle versioni (è possibile per esempio avere una o più versioni diverse di sviluppo del sito sulle quali si sta lavorando e una versione stabile che viene servita agli utenti).

Gestione dei contenuti

Le applicazioni web sono di solito costruite su tre livelli: i dati e le altre informazioni memorizzate nel database, i programmi che implementano la logica dell'applicazione e l'interfaccia utente.

Questa suddivisione ha molti vantaggi ma anche degli svantaggi: è infatti necessario imparare e conoscere tre diversi gruppi di strumenti per sviluppare i tre livelli dell'applicazione e occorre gestire accuratamente la sicurezza e la manutenzione di tutti e tre.

Zope risolve questo problema mantenendo la struttura a tre livelli (conservandone così i vantaggi) ma riunendo i tre gruppi di strumenti in un unico sistema integrato, aumentando di fatto le potenzialità dei tre livelli tramite un sistema coerente e organizzato di accesso a tutte le potenzialita.

Tramite l'interfaccia di amministrazione di Zope è infatti possibile creare basi di dati, procedure di trattamento e di visualizzazione dei dati e interfacce di interazione con l'utente.

Ovviamente anche in questo caso Zope permette di integrare la sua gestione con strumenti esterni specializzati. I programmi di authoring HTML possono, ad esempio, modificare gli oggetti che costituiscono un'applicazione collegandosi al database di Zope ed interagendo con esso come se fosse una normale struttura di file e directory tramite il protocollo FTP oppure il più moderno e potente WebDAV (che però non è ancora molto diffuso).

Componenti Web

Come abbiamo visto all'inizio, il Web non è più solo un mezzo rapido per distribuire documenti, esso è ormai diventato una piattaforma di sviluppo in continua evoluzione. La prova di questo sono i progetti che praticamente tutte le aziende di informatica stanno promuovendo da qualche anno a questa parte: non esiste un progetto che nel nome non comprenda le parole network, remote o distributed.

Zope è già pronto a collaborare con questi progetti, e in effetti già supporta gli standard che si sono affermati finora: XML, SOAP, XML-RPC, ...

Praticamente ogni oggetto di Zope è già un componente remoto accessibile tramite il suo URL e l'utilizzo di standard aperti e riconosciuti gli permette di essere pronto a qualsiasi evoluzione del web.

Utenti e sicurezza

La gestione della sicurezza nelle applicazioni web è un aspetto importantissimo, che deve essere tenuto presente fin dall'inizio della progettazione del sito. Una gestione della sicurezza non curata è dannosa non solo perché gli utenti potrebbero avere la possibilità effettuare operazioni che non gli sarebbero consentite, ma anche perché risulta molto difficile fornire i servizi agli utenti e nello stesso tempo controllare chi deve sviluppare e gestire il sito.

Per questi motivi, Zope ha una gestione della sicurezza che pervade quasi tutti gli aspetti di sviluppo dell'applicazione. In realta in Zope non c'è una netta distinzione tra utilizzare un'applicazione e gestirla. Questo potrebbe sembrare strano, ma il meccanismo è lo stesso usato nei sistemi operativi per distinguere tra un utente normale e l'amministratore: semplicemente l'utente ha permessi diversi. Chi deve gestire l'applicazione, avrà il permesso di modificare l'applicazione; chi invece deve usare l'applicazione avrà il permesso di interagire con l'applicazione solo nei modi che gli sviluppatori gli hanno messo a disposizione.

Autenticazione e autorizzazione

La sicurezza di solito comprende due concetti fondamentali: l'autenticazione e l'autorizzazione dell'utente. Esse consistono rispettivamente nel riconoscimento dell'utente e la determinazione di che cosa l'utente possa fare all'interno del sistema.

Zope usa un tipo particolare di cartelle (Users folders) pergestire gli account degli utenti. Nel momento in cui riceve una richiesta di accesso ad una risorsa protetta, Zope chiede all'utente di autenticarsi (identificarsi) per poter decidere se concedere all'utente la possibilità di accedere alla risorsa e quali permessi assegnargli.

E' da notare che Zope richiede l'autenticazione solo quando si accede a risorse protette, se si richiedono solo risorse libere, Zope continua ad assumere che l'utente sia anonimo (Anonymous).

Una volta che l'utente è stato autenticato, il processo di assegnazione dei permessi è diviso in due livelli intermedi: ad ogni utente sono assegnati dei ruoli (Roles) che descrivono cosa fa l'utente e ogni oggetto di Zope ha dei permessi (Permissions) che decidono quali sono le operazioni valide su quell'oggetto.

Ciò che permette di collegare i due livelli sono le politiche di sicurezza (Security policies). Quindi esse dicono chi può fare cosa.

L'autenticazione degli utenti può essere usata anche all'interno delle applicazioni stesse, Zope infatti permette di conoscere l'identità dell'utente che sta facendo una richiesta anche all'interno dell'oggetto che è stato chiamato, permettendo di fornire risposte diverse a seconda dell'utente.

Ancora una volta Zope mostra la sua flessibilità mettendo a disposizione diversi tipi di users folders: ci sono cartelle che permettono l'autenticazione da un database, da un server LDAP, direttamente dal sistema operativo e altre.

Divisione dei compiti

Il meccanismo più semplice di suddivisione dei compiti tra gli sviluppatori sfrutta il fatto che un utente definito ad un certo livello della gerarchia di oggetti (ricordiamo che le users folders e gli utenti sono oggetti come gli altri) non può in nessun modo accedere agli oggetti ai livelli precedenti (e quindi neanche ad oggetti sullo stesso livello, ma su rami differenti della gerarchia) ma ha accesso a tutti gli oggetti creati da quel livello in poi.

In questo modo si possono creare rami e utenti separati per i vari moduli dell'applicazione senza doversi preoccupare delle interferenze tra gli sviluppatori. Questa tecnica (basata sull'ereditarietà degli oggetti di Zope) si chiama delegazione ed è molto utile ad un manager di progetto che deve assegnare i compiti alla propria squadra.

Gestione della sicurezza

La gestione della sicurezza di Zope si basa su tre concetti fondamentali: i ruoli, i permessi e le politiche di sicurezza. I ruoli definiscono classi di utenti, i permessi definiscono le azioni possibili sugli oggetti e le politiche di sicurezza decidono quali classi di utenti (ruoli) possono intraprendere quali azioni (permessi) in una certa parte del sito.





Questo modello di gestione della sicurezza permette di semplificare la vita agli amministratori, permettendo loro di definire alcuni ruoli e assegnarli agli utenti quando necessario. E' anche possibile fare eccezioni per particolari utenti, oggetti o azioni, ma dover definire tutto questo per ogni singolo utente sarebbe stato molto più laborioso.

Questo è anche il modo più avanzato di gestire la collaborazione tra i diversi settori dello sviluppo dell'applicazione: ogni gruppo di sviluppatori corrisponde ad un ruolo in Zope e ad esso sono associati dei permessi e delle politiche di sicurezza che gli permettono di operare nelle sezioni che gli competono. Così si può raggiungere il massimo della flessibiltà senza rinunciare alla sicurezza (e all'affidabilità) del sistema.

Considerazioni di mercato

Come è già stato spiegato nel testo, il maggior punto di forza di Zope è la sua maggiore flessibilità e facilità di estensione rispetto a prodotti analoghi presenti sul mercato, che spesso si rivelano limitati nelle potenzialità o limitanti nella libertà di sviluppo (qualcuno ha detto: «Zope è quello che ColdFusion vorrebbe essere.»).

Un'altra delle caratteristiche che rendono Zope unico è la sua filosofia a componenti, che permette creare prodotti che vengono installati all'interno del server e permettono di espanderne le funzionalità (esistono prodotti per la gestione di siti di notizie, per lo scambio di commenti, per l'organizzazione di sondaggi, ecc...). E' sufficiente aggiungere un'interfaccia grafica e si ottiene rapidamente un sito funzionate, sicuro e ben testato.

Altre caratteristiche che fanno piacere agli sviluppatori, così come agli amministratori, sono la capacità di Zope di organizzare la collaborazione tra diversi gruppi di sviluppo, l'aumento della produttività dei team impegnati e la possibilità di poter contare su una vasta comunità di sviluppatori disponibili a fornire consigli e spiegazioni.

C'è anche la possibilità di commissionare direttamente a Digital Creations http://www.digicool.com (l'azienda produttrice di Zope) lo sviluppo di prodotti personalizzati o addirittura dell'intero sito. Questo è ovviamente un grosso vantaggio per quelle aziende che non dispongono di un reparto di sviluppo software o che non hanno lapossibilità di acquisire le conoscenze necessarie all'utilizzo avanzato di questo strumento. Farsi sviluppare il sito direttamente dagli sviluppatori dell'application server ha anche vantaggi derivati dall'esperienza sul prodotto (chi può conoscerlo megli di loro?) che indubbiamente porta alla produzione di software migliore.

Conclusioni

Questa è stata solo una breve panoramica sui principali concetti e sulle caratteristiche tecniche di questo potentissimo prodotto. L'intenzione era quella di far intravedere alcune delle sue potenzialità, cercando di mostrare gli aspetti più innovativi e di maggior interesse, per dare la possibilità di confrontarlo con soluzioni simili.

Crediamo in definitiva che questo sia un prodotto molto valido e difficilmente confrontabile con i concorrenti per le sue caratteristiche peculiari. Spesso viene usato proprio quando gli altri prodotti cominciano a mostrare dei limiti imposti dalla loro struttura più chiusa e rigida.

L'idea principale da comprendere è che Zope e costruito su una struttura completamente ad oggetti di livello decisamente più elevato rispetto all'approccio tradizionale basato su file, directory e script CGI.

In Zope ci sono oggetti che possono svolgere azioni e comunicare tra loro per fornire funzionalità molto avanzate, che sarebbe difficile ottenere in altri modi. Questo potrebbe essere un po' disorientante all'inizio, ma una volta che si è lasciata indietro la vecchia idea di sito, si cominciano a vedere tutti i vantaggi di un simile approccio.

Bibliografia

[1]
Zope Home Page [off-site link]
[2]
The Zope Book [off-site link]
[3]
An Introduction to Zope [off-site link]
[4]
Zope for the Perl/CGI programmer [off-site link]
[5]
Mark Lutz, ``Programming Python'', O'Reilly, 2001, ISBN: 0-596-00085-5
[6]
Zope Tour [off-site link]