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 ed i 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.
L'architettura di Zope è 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:
Non si è legati ad un particolare produttore o prodotto. Nel momento in cui uno dei prodotti che si sta utilizzando fosse inadatto alle nostre esigenze è possibile sostituirlo con uno più completo, praticamente senza influenzare il funzionamento delle applicazioni esistenti. Lo stesso ragionamento può essere fatto per i produttori che, se non forniscono servizi di qualità, possono facilmente essere soppiantati da un rivale. Entrambe queste possibilità favoriscono la concorrenza e quindi l'utente è nuovamente avvantaggiato, potendo disporre di prodotti e servizi migliori.
E' possibile far scalare l'applicazione in funzione del numero di utenti e di dati da trattare. Grazie alla flessibilità esposta in precedenza, quando si rende necessario ampliare il servizio a più utenti o l'applicazione espande la sua base dati oltre le capacità del DBMS in uso, si possono sostituire i componenti che mostrano limitazioni con altri più potenti e performanti. Anche questo è un vantaggio per l'utente perché permette di dimensionare il sistema (e quindi anche gli investimenti) a seconda delle proprie necessità, senza preoccuparsi troppo di possibili (e probabilmente desiderate) espansioni future.
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. Si tratta semplicemente di 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à: 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.
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
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) per gestire 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.
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.