Em meados de abril de 2008 o google lançou seu engine para a construção de aplicações web chamado de Google App Engine (GAE). A princípio pode parecer estranho e confesso que naquela época não dei muita bola para essa solução por que não entendi direito do que se tratava. A frase inicial do site diz que você pode desenvolver aplicações web e rodá-las utilizando a infra-estrutura do Google. Essa frase não esclarece muita coisa e também não despertou muito meu interesse naquela ocasião.
Acontece que ultimamente ando estudando Python e me deparei com o GAE novamente, só que agora com uma frase mais interessante que li: “A popularidade do Python vem crescendo radicalmente desde o lançamento oficial do Google App Engine”. Então resolvi dar uma olhada mais de perto e entender do que se tratava tudo aquilo e foi ai que eu me surpreendi!
Imagine poder desenvolver uma aplicação web, abstraindo totalmente as etapas “chatas” de infra-estrutura como configurar Application Server, Banco de Dados, Sistema Operacional, FTP, SCM, Wiki, Build, etc, etc… e investir seu tempo apenas desenvolvendo a aplicação em si..
Você pode até falar:
E quem disse que eu acho essas atividade “chatas”?!
De fato, eu mesmo não acho! Muito pelo contrario, já cansei de virar noite em casa configurando meu servidor CentOS com um monte de “tranqueiras” legais que acho pela net simplesmente pelo fato gostar!
Vou até citar algumas de minhas investidas:
- JBoss
- Glassfish
- Oracle XE
- mySQL
- PostGre
- Samba
- Subversion
- Maven
- Hudson
- Artifactory
- TWiki
etc etc…
Durante todo esse esforço o objetivo em mente era o mesmo: Construir e disponibilizar uma aplicação Web! Não sabia direito o que ou qual, mas queria fazer alguma coisa.
Conclusão: A tal aplicação nunca saiu!! Quando finalmente eu tinha toda a infra-estrutura montada e devidamente “tunada”, das duas, uma:
- Sem querer, pesquiso mais um pouco e acho uma outra solução muito melhor do que a que eu tinha acabado de configurar !! Você acha que vou ficar andando de fusquinha quando posso apavorar com uma Ferrari!?! Nem a pau! vou montar minha Ferrari! (Talvez essa seja uma vantagem da plataforma .Net: Eles só podem andar de gol bolinha!! hahahh)
- Minhas energias já estavam saturadas. Precisava dormir e trabalhar no dia seguinte afinal meu time de Scrum estava me esperando. :)
Será que isso só aconteceu comigo? Na real fiz tudo isso, e faço até hoje, por pura diversão, que no mínimo me agrega algum conhecimento. Porém, há quem diga que foi tudo uma perda de tempo! Até entendo o ponto de vista deles afinal não fui muito eficaz para concluir meu objetivo principal que era construir uma aplicação!
O Google App Engine se propõe resolver exatamente esse cenário! Para isso eles disponibilizaram uma solução que nada mais é que a junção de uma API com servidores de aplicação com um banco de dados. Dessa forma você desenvolve sua aplicação e faz um deploy na infra-estrutura do google e utiliza todos os seus recursos interessantes (Agora ficou mais clara a frase lá do inicio!).
A API abstrai muitos problemas como administração de base de dados por exemplo. Utilizando a Datastore API você define suas entidades e o engine do Google se encarrega de criar suas tabelas correspondentes no banco deles assim como escalar sua base no caso de um acesso pesado. Entre as APIs estão mais algumas funcionalidades interessantes como Mail API, Users API, Images API entre outras. Vale a pena dar uma olhada nos docs.
Para testar eu fiz Getting Started e depois fiz um deploy para o Google. Trata-se de um guestbook ridículo, só que mais ridículo ainda foi o tempo que eu gastei para fazer a aplicação e disponibilizá-la.
O código ficou assim:
import cgi
from google.appengine.ext import db
from google.appengine.api import users
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
class Greeting(db.Model):
author = db.UserProperty()
content = db.StringProperty(multiline=True)
date = db.DateTimeProperty(auto_now_add=True)
class MainPage(webapp.RequestHandler):
def get(self):
self.response.out.write('')
greetings = db.GqlQuery("SELECT * FROM Greeting
ORDER BY date DESC LIMIT 10")
for greeting in greetings:
if greeting.author:
self.response.out.write('<strong>%s</strong> wrote:' %
greeting.author.nickname())
else:
self.response.out.write('An anonymous person wrote:')
self.response.out.write('<blockquote>%s</blockquote>' %
cgi.escape(greeting.content))
# Write the submission form and the footer of the page
self.response.out.write("""
<form action="/sign" method="post">
<div><textarea name="content" rows="3" cols="60" /><div>
<div><input type="submit" value="Sign Guestbook"></div>
</form>
</body>
</html>""")
class Guestbook(webapp.RequestHandler):
def post(self):
greeting = Greeting()
if users.get_current_user():
greeting.author = users.get_current_user()
greeting.content = self.request.get('content')
greeting.put()
self.redirect('/')
application = webapp.WSGIApplication(
[('/', MainPage),
('/sign', Guestbook)],
debug=True)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
A API está disponível a princípio apenas em Python 2.5 mas para quem usa Linux ou MacOS ele já acompanha o Sistema Operacional. Quem usa Windows tem que baixar o Python e executar o famoso: Next, Next, OK! O Google já prometeu a outras comunidades o suporte da API para outras linguagens. Até lá apenas a galera do Python pode brincar. Você não sabe Python?! Faça como eu, compre um livro e comece a estudar. O que não faltam também são ótimos materiais online. Pesquise que tenho certeza que você acha fácil.
Estou longe de afirmar que GAE é a bala de prata do desenvolvimento web! O Google disponibiliza apenas 500mb de dados para as suas aplicações. Caso queira mais, vai ter que pagar por isso. E se você está pensando em mergulhar de cabeça nessa solução vale a pena ler esses dois posts de Jonathan e Marko que pesquizaram bastante o GAE e mostram alguns pontos negativos.
De qualquer forma, O GAE abre horizontes para outras possibilidades não vistas até então, e como toda boa vitrine ainda vai dar o que falar!
[]’s e até a próxima!
-l30-

Loading ...