84
Google App Engine http://slideshare.net/chesterbr desenvolvimento de aplicações para o

Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Embed Size (px)

DESCRIPTION

[Video: http://www.youtube.com/watch?feature=player_detailpage&v=nzo9dcCMi-4#t=1169s ] Palestra que introduz o desenvolvimento de aplicativos na plataforma do Google de forma pragmática, apresentada na 5a. edição (2012) do Campus Party (#cpbr5)

Citation preview

Page 1: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Google App Engine

http://slideshare.net/chesterbr

desenvolvimento de aplicações para o

Page 2: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Proposta

Apresentar de forma simples, prática e ao alcance de todos uma

alternativa para a criação de aplicativos na web escaláveis.

http://slideshare.net/chesterbr

Page 3: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Palestrante

@chesterbrhttp://chester.me

Page 4: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

não-especialista

(ou seja: se esse mané pode, eu também posso!)

Page 5: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Como surgem os bonsaplicativos web?

Page 6: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

existem existem muitasmuitas lendas... lendas...

Page 7: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

A mais popular

Page 8: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Dilema da Hospedagem

Enquanto o site não fizer sucesso,vou ter que custear a hospedagem

Quando ele crescer e meu provedor não aguentar, vou ter que mudar de provedor

(e talvez de tecnologia)

Quanto isso vai custar?

Page 9: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Dilema da Arquitetura

Projetar uma arquitetura para escalar exige tempo e skills, que poderiam ser

aplicados na aplicação em si (em particular no início), mas deixar isso pra depois pode gerar um problema difícil

Page 10: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Google App Engine

Page 11: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Equilíbrio

Crie seu aplicativo web rapidamente e a custo zero. Com alguns cuidados, ele

vai se adaptar a volumes de tráfego maiores e o custo de hospedagem será

proporcional a este aumento.

Page 12: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Obstáculos

O App Engine não é completamente diferente de outras arquiteturas, mas é

preciso aprender coisas novas

Nossa proposta hoje é ver essascoisas novas na prática

Page 13: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Escolhendo a Linguagem

Page 14: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

?

Page 15: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Java

É uma opção para quem já conhece ela (ou C#), mas muita coisa vai ter que

ser feita do “jeito App Engine”

(e não é lá muito popular hoje em dia...)

Page 16: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Java

X

Page 17: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Go

Criada pelo próprio Google, é boa em tarefas que exigem muita CPU (é

compilada e com tipos estáticos), mas o suporte ainda é experimental* e você

vai ter pouca companhia

* eles mesmos alertam: http://code.google.com/appengine/docs/

Page 18: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Go

Page 19: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Python

Fácil de aprender, poderosa(dinâmica, funcional, interativa),

estimula a escrita de código legível e tem uma comunidade muito ativa*

*

Page 20: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Python

Page 21: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Hello, App Engine

Page 22: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Ingredientes

● Google App Engine SDK para Python● Seu editor de textos favorito● Internet (para colocar no ar)

(opcional: Eclipse + plugin do App Engine)

http://code.google.com/appengine/downloads.html

Page 23: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

SDK (Launcher) no Windows

http://code.google.com/appengine/downloads.html

Page 24: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

SDK (Launcher) no Mac

http://code.google.com/appengine/downloads.html

Page 26: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Um app é uma pasta

Page 27: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Um app é uma pasta

Page 28: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

app.yaml

Descreve o seu aplicativo para os servidores do Google (nome, versão, linguagem), associando os endereços (ex.: “/”, “/noticias”) com o código

Page 29: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

app.yaml

application: meusiteversion: 1runtime: pythonapi_version: 1

handlers:- url: /.* script: meusite.py

Page 30: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Page 31: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

meusite.py

print "Oi, Campus Party!"

Page 32: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Page 33: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Tá pronto, vamos rodar!

Page 34: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

acrescentando no Launcher

Page 35: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

diga onde ele está...

Page 36: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

...e solta o play!

Page 37: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

era só isso?

Page 38: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Era!

Page 39: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Falando sério agora...

Page 40: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Criando via Launcher

Page 41: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Criando via Launcher

Page 42: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Page 43: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Page 44: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

app.yamlapplication: siteserioversion: 1runtime: pythonapi_version: 1

Handlers:- url: /favicon\.ico static_files: favicon.ico upload: favicon\.ico

- url: .* script: main.py

Page 45: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

main.py “sério”from google.appengine.ext import webappfrom google.appengine.ext.webapp import util

class MainHandler(webapp.RequestHandler): def get(self): self.response.out.write('Hello world!')

def main(): application = webapp.WSGIApplication(

[('/', MainHandler)], debug=True) util.run_wsgi_app(application)

if __name__ == '__main__': main()

Page 46: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

webapp

É a biblioteca (framework) que mapeia (através de um objeto WSGIApplication) cada caminho (ou grupo deles) para a

classe RequestHandler apropriada

Page 47: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Exemplo: site de notícias

...

def main(): application = webapp.WSGIApplication([

('/', HomeHandler),('/noticias', ListaNoticiasHandler),('/noticia/(\w+)', NoticiaHandler),...

], debug=True) util.run_wsgi_app(application)

...

Page 48: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Recuperando a notícia...

class NoticiaHandler(webapp.RequestHandler): def get(self, id_not): # id_not contém o item entre # parênteses em '/noticia/(\w+)' # ex.: /noticia/123 => id_not=123 noticia = dao.busca_noticia(id_not)

# montando o html com os dados: html = template.render('/noticia.html', noticia) self.response.out.write(noticia)

...

Page 49: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Template (noticia.html)<html> <body> <h1>{{titulo}}</h1> <h2>{{autor.nickname}}</h2> {{texto}} </body></html>

Page 50: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Parâmetros e REST...

class AlgumHandler(webapp.RequestHandler): def get(self): # parâmetros de formulário (GET, POST): p = self.request.get('nome_parametro')

# Outros verbos HTTP (i.e., REST): def post(self): ... def delete(self): ...

...

Page 51: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Alternativas

O webapp é minimalista, mas se isso não agradar, o App Engine suporta

outros frameworks populares

http://www.franciscosouza.com.br/tag/frameworks/

Page 52: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Armazenando Dados

Page 53: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Jeito clássico (relacional)

Page 54: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Bancos Relacionais

Têm implementações maduras, facilitam operações robustas (ACID), mapeiam (mais-ou-menos) com classes/objetos, performam bem em servidor único e (quase) todo mundo sabe usar SQL

mas...

Page 55: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Bancos Relacionais

...é difícil paralelizar sem afetar o aplicativo e/ou abrir mão de algumas dessas vantagens, o que tem levado à

busca de novas alternativas

Page 56: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

App Engine Datastore

Page 57: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Baseada no Bigtable, que é

“Um mapa ordenado esparso, distribuído, persistente e multidimensional. O mapa é

indexado por chave de linha, chave de coluna e data/hora; cada valor no mapa é

um array não-interpretado de bytes”

http://research.google.com/archive/bigtable-osdi06.pdf

Page 58: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Na prática

Vamos usar uma estrutura mais simples, na qual o aplicativo vai cuidar de mais coisas (ex.: consistência de dados), mas

o sistema poderá escalar facilmente usando a estrutura do Google

Page 59: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Boa notícia

O App Engine reduz esse trabalho com classes que encapsulam o Datastore na forma de “entidades” e permitem até

consultar em estilo SQL (GQL)

(só tome cuidado com as diferenças)

Page 60: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Exemplo...

class Noticia(db.Model): id = db.IntegerProperty(required=True) titulo = db.StringProperty(required=True) texto = db.StringProperty(required=True) editoria = db.StringProperty(required=True, choices=set(['politica', 'esportes', 'informatica'])) data_criacao = db.DateTimeProperty( auto_now=True) data_publicacao = db.DateTimeProperty() autor = db.UserProperty() avaliacao = db.IntegerProperty() acessos = db.IntegerProperty()...

Page 61: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Cadastrando (put)

...

noticia = Noticia( id = 123, titulo = 'SOPA foi pro vinagre!', texto = 'bla bla bla bla', editoria = 'politica') noticia.put() ...

Page 62: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Consulta (query)

...

# Montando a query q = Noticia.all() q.filter("editoria =", "esportes") q.order("-data_publicacao")

# Executando a query noticias = q.fetch(10) for noticia in noticias: print noticia.titulo...

Page 63: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Consulta (query) com GQL

...

# Montando a query q = db.GqlQuery("SELECT * FROM Noticia " + "WHERE editoria = :1" + "ORDER BY data_publicacao DESC", "esportes")

# Executando a query (não mudou nada!) noticias = q.fetch(10) for noticia in noticias: print noticia.titulo...

Page 64: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Índices

Todas as consultas são baseadas em índices definidos no index.yaml (mas

criados automaticamente à medida que você testa o site no servidor local)

(sim, vale dar uma espiada no arquivo)

Page 65: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Restrições

Como as buscas usam índices, existem algumas restrições. Por exemplo,

desigualdades (<, <=, >=, >, !=) só podem afetar um campo por consulta.

http://bit.ly/y3xtkk (Documentação: Restrições)

Page 66: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Restrições

...

# Query válida q = Noticia.all() q.filter("avaliacao >=", 3) q.filter("avaliacao <=", 8)...

# Query INVÁLIDA q = Noticia.all() q.filter("avaliacao >=", 5) q.filter("acessos >=", 12)...

http://bit.ly/y3xtkk (Documentação: Restrições)

Page 67: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Memcache

Alguns dados são muito mais acessados que outros (working set), e o AppEngine disponbiliza o Memcache para manter

esses dados em RAM

Page 68: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Memcache...

def busca_noticia(self, id): cache = memcache.Client() noticia = cache.get(id) if noticia is None: result = Noticia.all().filter("id =", int(id)).fetch(1) if result: noticia = result[0] cache.add(id, noticia) return noticia...

(não esqueça do cache.delete() se os dados mudarem)

Page 69: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Colocando no ar

Page 70: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Page 71: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

appengine.google.com

Page 72: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Cadastrando o aplicativo

Page 73: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

oh, oh...

Page 74: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

cadastre com outro nome...

Page 75: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

...e altere no app.yamlapplication: appdojoselitoversion: 1runtime: pythonapi_version: 1

Handlers:- url: /favicon\.ico static_files: favicon.ico upload: favicon\.ico

- url: .* script: main.py

Page 76: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Launcher

Page 77: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

login do Google

Page 78: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

ele trabalha, e...

Page 79: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Page 80: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Page 81: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Conclusão

Page 82: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

O poder é de vocês!

http://code.google.com/intl/pt-BR/appengine/docs/

É preciso estudar e experimentar, mas o App Engine está ao alcance de todos.

Basta começar!

Page 83: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Dúvidas?Obrigado!

@chesterbr

http://slideshare.net/chesterbrhttp://chester.me

Page 84: Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Créditos e LicenciamentoEsta apresentação está disponível para uso e reuso

sob os termos da licença Creative Commons “by-nc” 3.0,observadas as exceções abaixo

Fotos e ilustrações são em sua maioria logomarcas dos produtos e projetos referenciados (inclusos sob premissa de “fair use”) e ilustrações

de uso supostamente livre cuja autoria foi mencionada sempre que possível (correções são bem-vindas). Tais elementos são de propriedade de seus autores, e não estão cobertos pela licença acima, não havendo

qualquer relação deles com o autor