quarta-feira, 2 de fevereiro de 2011

Webapp-CE: Mais um framework saindo do forno

 Bom dia!

 Estava meio sumido do Blog, mas a Nuccitec tem consumido praticamente todo meu tempo :).
 O fato é que agora estou me aprofundando para aprender Python, influenciado pelo Google App Engine(GAE), infra da qual gosto muito. E para aprender, nada melhor que logo fazer framework...rs.
 Quando você lê os primeiro passos no GAE voltado para o Python, acaba se decepcionando com o webapp, pequeno framework web que o Google fez. A necessidade de ficar mapeando URL´s para handlers é um saco. Inclusive na própria documentação se comenta pra usar outros frameworks.
 Conversando sobre isso com meu amigo Reginaldo, ele me deu a idéia de fazer um REST seguindo uma convenção para executar os handlers, eliminando a tarefa braçal, chata, e suscetível a erros de ficar mapeando URL´s para Handlers. Assim nasceu o Webapp-CE, ou Webapp Convetion Engine.
 A idéia básica da convenção é parecida com existente no VRaptor, framework Java para WEB, que também é brasileiro. Suponha que você tem um handler br.com.SeuHandler que possua o método executar. A convenção consiste em mapear automaticamente esse método para a URL /br/com/SeuHandler/executar. E o que vir depois desse padrão é passado como parâmetro para o método executar.
 O framework também faz o inverso, ou seja, você passa o método e ele te devolve a URL. Isso torna o processo de mapeamento automático e se você mudar o nome do Handler ou até mesmo movê-lo para outro diretório, a URL muda de forma automática.
 O legal de tudo isso foi ter feito o framework em duas madrugadas. Ele possui apenas dois scripts. Mas no fonte do projeto existem também os testes unitários.
 A experiência serviu para me indicar que efetivamente o Python te da uma liberdade imensa e é uma tremenda ferramenta. A introspecção dele é excelente, bem como a parte de testes unitários. Cada vez mais tenho menos saudades do Java...rs. Em breve devo lançar o curso Python Básico e Python para GAE na Nuccitec.

 Espero que curtam o projeto.
 Renzo Nuccitelli

2 comentários:

Iuri disse...

Gostei da ideia. Já usei solucoes semelhantes no Google App Engine.

Algumas coisas pra melhorar:
1) BaseException é uma exception built-in, eu mudaria o nome. Acho que vc nem precisa criar uma exception padrão, dá pra só herdar de Exception.
2) Siga o PEP-8: http://www.python.org/dev/peps/pep-0008/
3) O ce-handler.py cria a application com debug=True. Isso precisa ser configurável.

Renzo disse...

Fala Iuri. Vlw pelas dicas. Então existem soluções parecidas? Dei uma procurada e não tinha encontrado. Mas vlw para começar no mundo do Python. De qualquer forma, envie uns links por favor, pra eu dar uma olhada.
Quanto às suas dicas:

1) Nem lanço a exceção, só subclasses delas. Mas vou mudar para não dar confusão.

2) Pois é, fiquei meio perdido mesmo. Vou dar uma olhada no material

3) Eu tinha pensado nisso. Mas é tão pequeno o arquivo que achei mais fácil alterar o parâmetro no próprio arquivo. Vou ver se coloco esse detalhe na própria documentação