Zope
Servidor de aplicações
Carlos Henrique Bauer
bauer@atlas.unisinos.br
Bastante utilizado em sites no exterior, o produto já
começa a aparecer em aplicações locais Desenvolvido pela Digital Creations
em conjunto com uma grande comunidade de usuários, o Zope é um servidor
`open source' de aplicações web. Exemplos de sites, no Brasil, que o
utilizam são o IDG Now! www.idg.com.br
e o Magnet www.magnet.com.br,
ambos desenvolvidos pela Hiperlógica hiper.com.br. No exterior podem ser
encontrados vários outros. Uma iniciativa que merece menção é a da
OpenClassroom www.openclassroom.org
, uma organização que pretende levar o poder do `open source' à educação
e utiliza o Zope como o servidor de aplicações. Escrito em Python,
com alguns módulos críticos otimizados para performance em C, o
Zope pode ser executado em plataformas Unix e NT e oferece aos
desenvolvedores as seguintes funcionalidades:
- Criação de aplicações através do uso de templates html;
- Gerenciamento e desenvolvimento de aplicações através de interface Web;
- Banco de dados orientado a objetos;
- Controle de acesso com a possibilidade de criação de perfis de usuários;
- Indexação de documentos e pesquisa por palavra-chave;
- Acesso a bancos de dados;
- Suporte à criação de versões;
- Suporte nativo aos protocolos http, ftp, Webdav e XML-RPC;
- Integração com outros servidores http;
- Possibilidade de adição de módulos desenvolvidos em Python.
As aplicações para o Zope são criadas utilizando-se
templates html escritos na linguagem `Document Template Markup Language'
(dtml). Vemos no quadro na página ao lado um exemplo de um documento
dtml que cria uma tabela contendo os identificadores, nomes e tipos dos
objetos armazenados em uma pasta.
No exemplo, `PARENTS[0]' é uma referência ao objeto
pasta que contém o arquivo index_html; `objectValues' é um método que
pertence a esta pasta e retorna uma lista contendo referências para todos os
objetos nela contidos. O comando `dtml-in' interage através de todas estas
referências e executa, para cada uma delas, o código contido dentro do bloco
<dtml-in> ... </dtml-in>. Os objetos são armazenados hierarquicamente pelo
Zope em seu banco de dados. Eles representam pastas, documentos, ../imagens,
consultas SQL, etc. As requisições recebidas dos clientes são mapeadas para
esta estrutura hierárquica por um dispositivo chamado `Object Request
Broker' (ORB). Quando o ORB recebe, por exemplo, uma URL como:
/Representantes/pesquisar?estado=RS, ele automaticamente localiza no banco
de dados a pasta `Representantes' e invoca o método dtml `pesquisar',
passando-lhe uma variável chamada `estado', cujo conteúdo é `RS'. O conteúdo
da variável pode ser acessado com uma simples linha <dtml-var estado> ou
passado como parâmetro para uma consulta SQL.
Gerenciamento e desenvolvimento de aplicações através de uma interface Web
![Figura 1](../imagens/figura1.gif)
As aplicações para o Zope podem ser criadas e
gerenciadas através de sua interface de gerenciamento Web, apresentada na
figura 1. Os objetos podem ser manipulados clicando-se nas etiquetas
que dão acesso às suas diferentes `views'. A figura 2 mostra a `view'
de edição de um objeto `dtml Document'. Infelizmente, os recursos de
edição disponíveis em um formulário html são limitados. Uma boa alternativa
é utilizar o Emacs ou XEmacs, através de seus módulos ange-ftp ou efs, para
acessar o site Zope via ftp e editar os seus documentos.
Banco de dados orientado a objetos
O Zope armazena os objetos em um banco de dados transacional
orientado a objetos denominado Zope Object Data Base (ZODB), atualmente em
sua terceira versão. Cada objeto pode receber, através de programa ou da
interface de gerenciamento, atributos adicionais definidos pelo
desenvolvedor da aplicação. Cada requisição Web é tratada atomicamente como
uma transação pelo banco de dados. Se algum erro ocorrer em uma aplicação
durante o processamento de uma requisição, a transação inteira será
cancelada e os objetos por ela afetados retornarão ao estado em que estavam
antes do seu início.
Controle de acesso com a possibilidade de criação de perfis de usuários
O controle de acesso disponibilizado pelo Zope permite
o enquadramento dos usuários em perfis e o ajuste fino de seus direitos,
incluindo a definição de quais tipos de objetos podem ser criados por eles.
Os direitos aplicáveis a um objeto dependem do tipo do objeto e podem ser
editados através de sua view `Security'.
Indexação de documentos e pesquisa por palavra-chave
Outra característica importante do Zope é o seu mecanismo
de indexação e busca através de palavras-chave, disponibilizado através dos
objetos ZCatalog. Estes objetos permitem que você crie diversos índices
ou catálogos em seu site, indexando os documentos pelo seu conteúdo ou
por seus atributos.
Acesso a bancos de dados.
Uma plataforma de aplicações para a Web não seria
completa se não permitisse o acesso aos bancos de dados SQL mais utilizados
no mercado. Atualmente, estão disponíveis adaptadores para os servidores:
MySQL, Sybase e Oracle. Um adaptador para o PostGreSQL está em fase de
desenvolvimento. Para plataformas NT, está disponível um adaptador ODBC,
permitindo acesso a todos os bancos de dados para os quais esta interface
está disponível.
Suporte à criação de versões.
O Zope também permite que você trabalhe com versões,
`views' privadas de uma pasta. Todas as modificações realizadas em
uma versão ficam invísiveis ao usuário da aplicação enquanto elas não forem
efetivadas pelo seu desenvolvedor.
Suporte nativo aos protocolos http, ftp, WebDAV e XML-RPC.
O Zope possui suporte nativo a http, ftp e WebDAV
através do seu próprio servidor Web, o ZServer. XML-RPC também é suportado.
Para saber mais sobre o uso de XML-RPC com o Zope, leia o artigo de Jon
Udell, XML-RPC Programming with Zope,
www.byte.com/column/BYT19991021S0014.
Integração com outros servidores http
O uso do ZServer como servidor http do Zope não é
obrigatório. Se você necessita de uma funcionalidade não disponível
no ZServer, como, por exemplo, suporte a SSL, você pode integrar o
Zope a outros servidores http, tais como o Apache, através de um
mecanismo conhecido como Persistent CGI (PCGI).
Possibilidade de adição de módulos desenvolvidos em Python
Permite a adição de módulos desenvolvidos em Python, conhecidos
no jargão do Zope como `produtos'. No site do Zope existem, disponíveis
para download, vários produtos que foram contribuições de outros usuários.
Antes de sair desenvolvendo alguma coisa, para economizar
trabalho, dê uma olhada neles. Um interessante é o Squishdot
squishdot.org, um sistema de
publicação de notícias inspirado pelo Slashdot
www.slashdot.org.
O problema da documentação
Infelizmente, a pessoa que desejar desenvolver aplicações
com o Zope deve superar o obstáculo da falta ou insuficiência de documentação,
mesmo em inglês. Não existe um manual estruturado sobre o Zope. Estão
disponíveis apenas alguns guias e diversos `How-tos'. Este problema
aparentemente está para ser solucionado. No último dia 2 de novembro foi
anunciada, em uma mensagem para lista de discussão do Zope, a publicação
de um livro pela O'Reilly and Associates, conhecida editora de títulos
na área de Unix.
Conclusão
O Zope é um poderoso servidor `open source' de
aplicações que provê um conjunto importante de funcionalidades básicas
para aplicações Web. Se você não se assusta com documentação escrita
em inglês e necessita desenvolver aplicações Web, ele é uma opção
que merece ser avaliada.
![Figura 2](../imagens/figura2_1.jpg)