SlideShare a Scribd company logo
1 of 84
desenvolvimento de aplicações para o
Google App Engine




               http://slideshare.net/chesterbr
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
Palestrante




                   @chesterbr
              http://chester.me
não-especialista




(ou seja: se esse mané pode, eu também posso!)
Como surgem os bons
  aplicativos web?
existem muitas lendas...
A mais popular
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?
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
Google App Engine
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.
Obstáculos

 O App Engine não é completamente
diferente de outras arquiteturas, mas é
     preciso aprender coisas novas

   Nossa proposta hoje é ver essas
       coisas novas na prática
Escolhendo a Linguagem
?
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...)
Java




X
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/
Go
Python
     Fácil de aprender, poderosa
   (dinâmica, funcional, interativa),
estimula a escrita de código legível e
 tem uma comunidade muito ativa*



                  *
Python
Hello, App Engine
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
SDK (Launcher) no Windows




         http://code.google.com/appengine/downloads.html
SDK (Launcher) no Mac




       http://code.google.com/appengine/downloads.html
Desenvolvimento de aplicações para o Google App Engine
Um app é uma pasta
Um app é uma pasta
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
app.yaml
application: meusite
version: 1
runtime: python
api_version: 1

handlers:
- url: /.*
  script: meusite.py
Desenvolvimento de aplicações para o Google App Engine
meusite.py
print "Oi, Campus Party!"
Desenvolvimento de aplicações para o Google App Engine
Tá pronto, vamos rodar!
acrescentando no Launcher
diga onde ele está...
...e solta o play!
era só isso?
Era!




☺
Falando sério agora...
Criando via Launcher
Criando via Launcher
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App Engine
app.yaml
application: siteserio
version: 1
runtime: python
api_version: 1

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

- url: .*
  script: main.py
main.py “sério”
from google.appengine.ext import webapp
from 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()
webapp

 É a biblioteca (framework) que mapeia
(através de um objeto WSGIApplication)
 cada caminho (ou grupo deles) para a
    classe RequestHandler apropriada
Exemplo: site de notícias
...

def main():
    application = webapp.WSGIApplication([
           ('/', HomeHandler),
           ('/noticias', ListaNoticiasHandler),
           ('/noticia/(w+)', NoticiaHandler),
           ...
        ], debug=True)
    util.run_wsgi_app(application)

...
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)
...
Template (noticia.html)
<html>
  <body>
    <h1>{{titulo}}</h1>
    <h2>{{autor.nickname}}</h2>
    {{texto}}
  </body>
</html>
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):
          ...

...
Alternativas
O webapp é minimalista, mas se isso
 não agradar, o App Engine suporta
   outros frameworks populares




            http://www.franciscosouza.com.br/tag/frameworks/
Armazenando Dados
Jeito clássico (relacional)
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...
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
App Engine Datastore
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
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
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)
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()
...
Cadastrando (put)
...
      noticia = Noticia(
                    id = 123,
                    titulo = 'SOPA foi pro vinagre!',
                    texto = 'bla bla bla bla',
                    editoria = 'politica')
      noticia.put()
...
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
...
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
...
Í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)
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)
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)
Memcache

Alguns dados são muito mais acessados
que outros (working set), e o AppEngine
 disponbiliza o Memcache para manter
         esses dados em RAM
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)
Colocando no ar
Desenvolvimento de aplicações para o Google App Engine
appengine.google.com
Cadastrando o aplicativo
oh, oh...
cadastre com outro nome...
...e altere no app.yaml
application: appdojoselito
version: 1
runtime: python
api_version: 1

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

- url: .*
  script: main.py
Launcher
login do Google
ele trabalha, e...
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App Engine
Conclusão
O poder é de vocês!

  É preciso estudar e experimentar, mas
  o App Engine está ao alcance de todos.
             Basta começar!




http://code.google.com/intl/pt-BR/appengine/docs/
Dúvidas?
Obrigado!

                      @chesterbr
                 http://chester.me
   http://slideshare.net/chesterbr
Créditos e Licenciamento
          Esta 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

More Related Content

What's hot

Desenvolvendo aplicações com Angular e Laravel no Back-end
Desenvolvendo aplicações com Angular e Laravel no Back-endDesenvolvendo aplicações com Angular e Laravel no Back-end
Desenvolvendo aplicações com Angular e Laravel no Back-endGiovanny Valente
 
Minicurso de Cakephp
Minicurso de CakephpMinicurso de Cakephp
Minicurso de CakephpCauan Cabral
 
Ionic 2/3 + Firebase
Ionic 2/3 + FirebaseIonic 2/3 + Firebase
Ionic 2/3 + FirebaseBruno Catão
 
Introdução ao Desenvolvimento de aplicações WEB com JSP
Introdução ao Desenvolvimento de aplicações WEB com JSPIntrodução ao Desenvolvimento de aplicações WEB com JSP
Introdução ao Desenvolvimento de aplicações WEB com JSPManoel Afonso
 
Desenvolvendo aplicações web com o framework cakephp
Desenvolvendo aplicações web com o framework cakephpDesenvolvendo aplicações web com o framework cakephp
Desenvolvendo aplicações web com o framework cakephpRodrigo Aramburu
 
Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Vinícius de Paula
 
Python e Django
Python e DjangoPython e Django
Python e Djangopugpe
 
Java Web 3 - Servlets e JSP 1
Java Web 3 - Servlets e JSP 1Java Web 3 - Servlets e JSP 1
Java Web 3 - Servlets e JSP 1Eduardo Mendes
 
Desenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsDesenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsIgo Coelho
 
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2Thyago Maia
 

What's hot (20)

Grails
GrailsGrails
Grails
 
Model View Controller
Model View ControllerModel View Controller
Model View Controller
 
Desenvolvendo aplicações com Angular e Laravel no Back-end
Desenvolvendo aplicações com Angular e Laravel no Back-endDesenvolvendo aplicações com Angular e Laravel no Back-end
Desenvolvendo aplicações com Angular e Laravel no Back-end
 
Minicurso de Cakephp
Minicurso de CakephpMinicurso de Cakephp
Minicurso de Cakephp
 
Ionic 2/3 + Firebase
Ionic 2/3 + FirebaseIonic 2/3 + Firebase
Ionic 2/3 + Firebase
 
Curso de JSP
Curso de JSPCurso de JSP
Curso de JSP
 
Treinamento Play Framework
Treinamento Play FrameworkTreinamento Play Framework
Treinamento Play Framework
 
Introdução ao Desenvolvimento de aplicações WEB com JSP
Introdução ao Desenvolvimento de aplicações WEB com JSPIntrodução ao Desenvolvimento de aplicações WEB com JSP
Introdução ao Desenvolvimento de aplicações WEB com JSP
 
Desenvolvendo aplicações web com o framework cakephp
Desenvolvendo aplicações web com o framework cakephpDesenvolvendo aplicações web com o framework cakephp
Desenvolvendo aplicações web com o framework cakephp
 
ApresentaçãO Mvc
ApresentaçãO MvcApresentaçãO Mvc
ApresentaçãO Mvc
 
Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.
 
Java Web 1 Introducao
Java Web 1 IntroducaoJava Web 1 Introducao
Java Web 1 Introducao
 
Web Offline
Web OfflineWeb Offline
Web Offline
 
Python e Django
Python e DjangoPython e Django
Python e Django
 
Java Web 3 - Servlets e JSP 1
Java Web 3 - Servlets e JSP 1Java Web 3 - Servlets e JSP 1
Java Web 3 - Servlets e JSP 1
 
Tutorial +login+mvc
Tutorial +login+mvcTutorial +login+mvc
Tutorial +login+mvc
 
Desenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsDesenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e Servlets
 
jsp-intro
jsp-introjsp-intro
jsp-intro
 
Servlets e JSP
Servlets e JSPServlets e JSP
Servlets e JSP
 
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2
 

Viewers also liked

É Hora de criar sua própria engine de jogos?
É Hora de criar sua própria engine de jogos?É Hora de criar sua própria engine de jogos?
É Hora de criar sua própria engine de jogos?José Farias
 
Tk03 Google App Engine Fr
Tk03 Google App Engine FrTk03 Google App Engine Fr
Tk03 Google App Engine FrValtech
 
Palestra "Teste de Invasão com o Nmap Scripting Engine"" FISL 13
Palestra "Teste de Invasão com o Nmap Scripting Engine"" FISL 13 Palestra "Teste de Invasão com o Nmap Scripting Engine"" FISL 13
Palestra "Teste de Invasão com o Nmap Scripting Engine"" FISL 13 Clavis Segurança da Informação
 
DNUG2015 Frühjahrskonferenz: Brücken bauen, Grenzen überwinden: Domino im Dia...
DNUG2015 Frühjahrskonferenz: Brücken bauen, Grenzen überwinden: Domino im Dia...DNUG2015 Frühjahrskonferenz: Brücken bauen, Grenzen überwinden: Domino im Dia...
DNUG2015 Frühjahrskonferenz: Brücken bauen, Grenzen überwinden: Domino im Dia...JRibbeck
 
Nuxeo WebEngine : Etude de cas
Nuxeo WebEngine : Etude de casNuxeo WebEngine : Etude de cas
Nuxeo WebEngine : Etude de casDamien Metzler
 
An introduction to Google's App Engine
An introduction to Google's App EngineAn introduction to Google's App Engine
An introduction to Google's App EngineStefan Sperber
 
b2performance berth
b2performance berthb2performance berth
b2performance berthITB Berlin
 
Google Cloud Platform. Google App Engine
Google Cloud Platform. Google App Engine Google Cloud Platform. Google App Engine
Google Cloud Platform. Google App Engine Kwaye Kant
 
Search Engine Friendly Design (SEFD) - SMX München 2014
Search Engine Friendly Design (SEFD) - SMX München 2014Search Engine Friendly Design (SEFD) - SMX München 2014
Search Engine Friendly Design (SEFD) - SMX München 2014Daniel Herndler
 
Google App Engine. Zwei Jahre im Produktiveinsatz
Google App Engine. Zwei Jahre im ProduktiveinsatzGoogle App Engine. Zwei Jahre im Produktiveinsatz
Google App Engine. Zwei Jahre im ProduktiveinsatzPer Fragemann
 
Google App Engine For Java
Google App Engine For JavaGoogle App Engine For Java
Google App Engine For Javatcouery
 
FACT-Finder Webinar Recommendation Engine 2.0
FACT-Finder Webinar Recommendation Engine 2.0FACT-Finder Webinar Recommendation Engine 2.0
FACT-Finder Webinar Recommendation Engine 2.0Omikron Data Quality GmbH
 
WordPress State of the Word 2012
WordPress State of the Word 2012WordPress State of the Word 2012
WordPress State of the Word 2012photomatt
 
Introduction à Google App Engine - WAQ 2011
Introduction à Google App Engine - WAQ 2011Introduction à Google App Engine - WAQ 2011
Introduction à Google App Engine - WAQ 2011jimmybourassa
 
Cours Search Marketing - 1 Introduction - IAE Lille
Cours Search Marketing -  1 Introduction - IAE LilleCours Search Marketing -  1 Introduction - IAE Lille
Cours Search Marketing - 1 Introduction - IAE LilleRenaud JOLY
 
Cloud & Google app engine Presentation by Ngiambus Marcus
 Cloud & Google app engine Presentation  by Ngiambus Marcus Cloud & Google app engine Presentation  by Ngiambus Marcus
Cloud & Google app engine Presentation by Ngiambus MarcusMarc NGIAMBA
 
Web meets Location - Mobile Social Media Relations
Web meets Location - Mobile Social Media RelationsWeb meets Location - Mobile Social Media Relations
Web meets Location - Mobile Social Media RelationsSympra GmbH (GPRA)
 

Viewers also liked (20)

Zk Framework
Zk FrameworkZk Framework
Zk Framework
 
É Hora de criar sua própria engine de jogos?
É Hora de criar sua própria engine de jogos?É Hora de criar sua própria engine de jogos?
É Hora de criar sua própria engine de jogos?
 
Tk03 Google App Engine Fr
Tk03 Google App Engine FrTk03 Google App Engine Fr
Tk03 Google App Engine Fr
 
Palestra "Teste de Invasão com o Nmap Scripting Engine"" FISL 13
Palestra "Teste de Invasão com o Nmap Scripting Engine"" FISL 13 Palestra "Teste de Invasão com o Nmap Scripting Engine"" FISL 13
Palestra "Teste de Invasão com o Nmap Scripting Engine"" FISL 13
 
DNUG2015 Frühjahrskonferenz: Brücken bauen, Grenzen überwinden: Domino im Dia...
DNUG2015 Frühjahrskonferenz: Brücken bauen, Grenzen überwinden: Domino im Dia...DNUG2015 Frühjahrskonferenz: Brücken bauen, Grenzen überwinden: Domino im Dia...
DNUG2015 Frühjahrskonferenz: Brücken bauen, Grenzen überwinden: Domino im Dia...
 
Google App Engine - INTRO
Google App Engine - INTROGoogle App Engine - INTRO
Google App Engine - INTRO
 
Nuxeo WebEngine : Etude de cas
Nuxeo WebEngine : Etude de casNuxeo WebEngine : Etude de cas
Nuxeo WebEngine : Etude de cas
 
An introduction to Google's App Engine
An introduction to Google's App EngineAn introduction to Google's App Engine
An introduction to Google's App Engine
 
b2performance berth
b2performance berthb2performance berth
b2performance berth
 
Google Cloud Platform. Google App Engine
Google Cloud Platform. Google App Engine Google Cloud Platform. Google App Engine
Google Cloud Platform. Google App Engine
 
Search Engine Friendly Design (SEFD) - SMX München 2014
Search Engine Friendly Design (SEFD) - SMX München 2014Search Engine Friendly Design (SEFD) - SMX München 2014
Search Engine Friendly Design (SEFD) - SMX München 2014
 
Google App Engine. Zwei Jahre im Produktiveinsatz
Google App Engine. Zwei Jahre im ProduktiveinsatzGoogle App Engine. Zwei Jahre im Produktiveinsatz
Google App Engine. Zwei Jahre im Produktiveinsatz
 
Google App Engine For Java
Google App Engine For JavaGoogle App Engine For Java
Google App Engine For Java
 
FACT-Finder Webinar Recommendation Engine 2.0
FACT-Finder Webinar Recommendation Engine 2.0FACT-Finder Webinar Recommendation Engine 2.0
FACT-Finder Webinar Recommendation Engine 2.0
 
WordPress State of the Word 2012
WordPress State of the Word 2012WordPress State of the Word 2012
WordPress State of the Word 2012
 
Google App Engine
Google App EngineGoogle App Engine
Google App Engine
 
Introduction à Google App Engine - WAQ 2011
Introduction à Google App Engine - WAQ 2011Introduction à Google App Engine - WAQ 2011
Introduction à Google App Engine - WAQ 2011
 
Cours Search Marketing - 1 Introduction - IAE Lille
Cours Search Marketing -  1 Introduction - IAE LilleCours Search Marketing -  1 Introduction - IAE Lille
Cours Search Marketing - 1 Introduction - IAE Lille
 
Cloud & Google app engine Presentation by Ngiambus Marcus
 Cloud & Google app engine Presentation  by Ngiambus Marcus Cloud & Google app engine Presentation  by Ngiambus Marcus
Cloud & Google app engine Presentation by Ngiambus Marcus
 
Web meets Location - Mobile Social Media Relations
Web meets Location - Mobile Social Media RelationsWeb meets Location - Mobile Social Media Relations
Web meets Location - Mobile Social Media Relations
 

Similar to Desenvolvimento de aplicações para o Google App Engine

Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkPablo Dall'Oglio
 
Tornando as coisas mais simples com Azure Functions e Node.JS
Tornando as coisas mais simples com Azure Functions e Node.JSTornando as coisas mais simples com Azure Functions e Node.JS
Tornando as coisas mais simples com Azure Functions e Node.JSMatheus Donizete
 
TDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direitoTDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direitoCezinha Anjos
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmGuilherme Blanco
 
Desenvolvimento de Apps e Games para Android - Parte 5
Desenvolvimento de Apps e Games para Android - Parte 5Desenvolvimento de Apps e Games para Android - Parte 5
Desenvolvimento de Apps e Games para Android - Parte 5Erisvaldo Junior
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Androidtdc-globalcode
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Androidtdc-globalcode
 
Desenvolvendo aplicativos web com o google app engine
Desenvolvendo aplicativos web com o google app engineDesenvolvendo aplicativos web com o google app engine
Desenvolvendo aplicativos web com o google app enginepugpe
 
LambdaDay: Backbone.js
LambdaDay: Backbone.jsLambdaDay: Backbone.js
LambdaDay: Backbone.jsGiovanni Bassi
 
Introdução à Programação Web com Angular
Introdução à Programação Web com AngularIntrodução à Programação Web com Angular
Introdução à Programação Web com AngularElmano Cavalcanti
 
Django Apps - Do Núcleo a Otimização
Django Apps - Do Núcleo a OtimizaçãoDjango Apps - Do Núcleo a Otimização
Django Apps - Do Núcleo a OtimizaçãoLeandro Zanuz
 

Similar to Desenvolvimento de aplicações para o Google App Engine (20)

Palestra
PalestraPalestra
Palestra
 
Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um Framework
 
Tornando as coisas mais simples com Azure Functions e Node.JS
Tornando as coisas mais simples com Azure Functions e Node.JSTornando as coisas mais simples com Azure Functions e Node.JS
Tornando as coisas mais simples com Azure Functions e Node.JS
 
TDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direitoTDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direito
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
Desenvolvimento de Apps e Games para Android - Parte 5
Desenvolvimento de Apps e Games para Android - Parte 5Desenvolvimento de Apps e Games para Android - Parte 5
Desenvolvimento de Apps e Games para Android - Parte 5
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Android
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Android
 
Desenvolvendo aplicativos web com o google app engine
Desenvolvendo aplicativos web com o google app engineDesenvolvendo aplicativos web com o google app engine
Desenvolvendo aplicativos web com o google app engine
 
LambdaDay: Backbone.js
LambdaDay: Backbone.jsLambdaDay: Backbone.js
LambdaDay: Backbone.js
 
Aplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com DjangoAplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com Django
 
Java e Cloud Computing
Java e Cloud ComputingJava e Cloud Computing
Java e Cloud Computing
 
Google apps script - Parte 2
Google apps script - Parte 2Google apps script - Parte 2
Google apps script - Parte 2
 
Introdução à Programação Web com Angular
Introdução à Programação Web com AngularIntrodução à Programação Web com Angular
Introdução à Programação Web com Angular
 
Mashups: Criando Valor na Web 2.0 (BandTec)
Mashups: Criando Valor na Web 2.0 (BandTec)Mashups: Criando Valor na Web 2.0 (BandTec)
Mashups: Criando Valor na Web 2.0 (BandTec)
 
Django Módulo Básico Parte II
Django Módulo Básico Parte IIDjango Módulo Básico Parte II
Django Módulo Básico Parte II
 
Django Apps - Do Núcleo a Otimização
Django Apps - Do Núcleo a OtimizaçãoDjango Apps - Do Núcleo a Otimização
Django Apps - Do Núcleo a Otimização
 
Android na Prática
Android na PráticaAndroid na Prática
Android na Prática
 
Kotlin first
Kotlin firstKotlin first
Kotlin first
 
Java Seminar
Java SeminarJava Seminar
Java Seminar
 

More from Campus Party Brasil

Técnicas forenses para a recuperação de arquivos
Técnicas forenses para a recuperação de arquivosTécnicas forenses para a recuperação de arquivos
Técnicas forenses para a recuperação de arquivosCampus Party Brasil
 
Como ganhar dinheiro no mundo mobile?
Como ganhar dinheiro no mundo mobile?Como ganhar dinheiro no mundo mobile?
Como ganhar dinheiro no mundo mobile?Campus Party Brasil
 
Tempestades solares: mitos e verdades
Tempestades solares: mitos e verdadesTempestades solares: mitos e verdades
Tempestades solares: mitos e verdadesCampus Party Brasil
 
A busca por planetas além do sistema solar
A busca por planetas além do sistema solarA busca por planetas além do sistema solar
A busca por planetas além do sistema solarCampus Party Brasil
 
Construção de uma luneta a baixo custo
Construção de uma luneta a baixo custoConstrução de uma luneta a baixo custo
Construção de uma luneta a baixo custoCampus Party Brasil
 
Hardware livre Arduino: eletrônica e robótica com hardware e software livres
Hardware livre Arduino: eletrônica e robótica com hardware e software livresHardware livre Arduino: eletrônica e robótica com hardware e software livres
Hardware livre Arduino: eletrônica e robótica com hardware e software livresCampus Party Brasil
 
Robótica e educação inclusiva
Robótica e educação inclusivaRobótica e educação inclusiva
Robótica e educação inclusivaCampus Party Brasil
 
Fazendo do jeito certo: criando jogos sofisticados com DirectX
Fazendo do jeito certo: criando jogos sofisticados com DirectXFazendo do jeito certo: criando jogos sofisticados com DirectX
Fazendo do jeito certo: criando jogos sofisticados com DirectXCampus Party Brasil
 
Robótica e educação inclusiva
	Robótica e educação inclusiva	Robótica e educação inclusiva
Robótica e educação inclusivaCampus Party Brasil
 
Gestão e monitoramento de redes e dispositivos com Software Livre
Gestão e monitoramento de redes e dispositivos com Software LivreGestão e monitoramento de redes e dispositivos com Software Livre
Gestão e monitoramento de redes e dispositivos com Software LivreCampus Party Brasil
 
Confecção de Circuito Impresso
Confecção de Circuito ImpressoConfecção de Circuito Impresso
Confecção de Circuito ImpressoCampus Party Brasil
 
Virtualização, cloud computig e suas tendencias
Virtualização, cloud computig e suas tendenciasVirtualização, cloud computig e suas tendencias
Virtualização, cloud computig e suas tendenciasCampus Party Brasil
 

More from Campus Party Brasil (20)

Wordpress
WordpressWordpress
Wordpress
 
Buracos negros
Buracos negrosBuracos negros
Buracos negros
 
Programação para Atari 2600
Programação para Atari 2600Programação para Atari 2600
Programação para Atari 2600
 
Técnicas forenses para a recuperação de arquivos
Técnicas forenses para a recuperação de arquivosTécnicas forenses para a recuperação de arquivos
Técnicas forenses para a recuperação de arquivos
 
Como ganhar dinheiro no mundo mobile?
Como ganhar dinheiro no mundo mobile?Como ganhar dinheiro no mundo mobile?
Como ganhar dinheiro no mundo mobile?
 
Tempestades solares: mitos e verdades
Tempestades solares: mitos e verdadesTempestades solares: mitos e verdades
Tempestades solares: mitos e verdades
 
A busca por planetas além do sistema solar
A busca por planetas além do sistema solarA busca por planetas além do sistema solar
A busca por planetas além do sistema solar
 
Passeio virtual pelo LHC
Passeio virtual pelo LHCPasseio virtual pelo LHC
Passeio virtual pelo LHC
 
Construção de uma luneta a baixo custo
Construção de uma luneta a baixo custoConstrução de uma luneta a baixo custo
Construção de uma luneta a baixo custo
 
Hardware livre Arduino: eletrônica e robótica com hardware e software livres
Hardware livre Arduino: eletrônica e robótica com hardware e software livresHardware livre Arduino: eletrônica e robótica com hardware e software livres
Hardware livre Arduino: eletrônica e robótica com hardware e software livres
 
Robótica e educação inclusiva
Robótica e educação inclusivaRobótica e educação inclusiva
Robótica e educação inclusiva
 
Fazendo do jeito certo: criando jogos sofisticados com DirectX
Fazendo do jeito certo: criando jogos sofisticados com DirectXFazendo do jeito certo: criando jogos sofisticados com DirectX
Fazendo do jeito certo: criando jogos sofisticados com DirectX
 
Blue Via
Blue ViaBlue Via
Blue Via
 
Linux para iniciantes
Linux para iniciantesLinux para iniciantes
Linux para iniciantes
 
Robótica e educação inclusiva
	Robótica e educação inclusiva	Robótica e educação inclusiva
Robótica e educação inclusiva
 
Gestão e monitoramento de redes e dispositivos com Software Livre
Gestão e monitoramento de redes e dispositivos com Software LivreGestão e monitoramento de redes e dispositivos com Software Livre
Gestão e monitoramento de redes e dispositivos com Software Livre
 
Confecção de Circuito Impresso
Confecção de Circuito ImpressoConfecção de Circuito Impresso
Confecção de Circuito Impresso
 
Vida de Programador
Vida de Programador Vida de Programador
Vida de Programador
 
Virtualização, cloud computig e suas tendencias
Virtualização, cloud computig e suas tendenciasVirtualização, cloud computig e suas tendencias
Virtualização, cloud computig e suas tendencias
 
Desafio Robótica Livre
Desafio Robótica LivreDesafio Robótica Livre
Desafio Robótica Livre
 

Desenvolvimento de aplicações para o Google App Engine

  • 1. desenvolvimento de aplicações para o Google App Engine http://slideshare.net/chesterbr
  • 2. 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
  • 3. Palestrante @chesterbr http://chester.me
  • 4. não-especialista (ou seja: se esse mané pode, eu também posso!)
  • 5. Como surgem os bons aplicativos web?
  • 8. 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?
  • 9. 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
  • 11. 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.
  • 12. Obstáculos O App Engine não é completamente diferente de outras arquiteturas, mas é preciso aprender coisas novas Nossa proposta hoje é ver essas coisas novas na prática
  • 14. ?
  • 15. 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...)
  • 17. 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/
  • 18. Go
  • 19. Python Fácil de aprender, poderosa (dinâmica, funcional, interativa), estimula a escrita de código legível e tem uma comunidade muito ativa* *
  • 22. 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
  • 23. SDK (Launcher) no Windows http://code.google.com/appengine/downloads.html
  • 24. SDK (Launcher) no Mac http://code.google.com/appengine/downloads.html
  • 26. Um app é uma pasta
  • 27. Um app é uma pasta
  • 28. 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
  • 29. app.yaml application: meusite version: 1 runtime: python api_version: 1 handlers: - url: /.* script: meusite.py
  • 35. diga onde ele está...
  • 36. ...e solta o play!
  • 44. app.yaml application: siteserio version: 1 runtime: python api_version: 1 Handlers: - url: /favicon.ico static_files: favicon.ico upload: favicon.ico - url: .* script: main.py
  • 45. main.py “sério” from google.appengine.ext import webapp from 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()
  • 46. webapp É a biblioteca (framework) que mapeia (através de um objeto WSGIApplication) cada caminho (ou grupo deles) para a classe RequestHandler apropriada
  • 47. Exemplo: site de notícias ... def main(): application = webapp.WSGIApplication([ ('/', HomeHandler), ('/noticias', ListaNoticiasHandler), ('/noticia/(w+)', NoticiaHandler), ... ], debug=True) util.run_wsgi_app(application) ...
  • 48. 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) ...
  • 49. Template (noticia.html) <html> <body> <h1>{{titulo}}</h1> <h2>{{autor.nickname}}</h2> {{texto}} </body> </html>
  • 50. 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): ... ...
  • 51. Alternativas O webapp é minimalista, mas se isso não agradar, o App Engine suporta outros frameworks populares http://www.franciscosouza.com.br/tag/frameworks/
  • 54. 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...
  • 55. 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
  • 57. 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
  • 58. 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
  • 59. 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)
  • 60. 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() ...
  • 61. Cadastrando (put) ... noticia = Noticia( id = 123, titulo = 'SOPA foi pro vinagre!', texto = 'bla bla bla bla', editoria = 'politica') noticia.put() ...
  • 62. 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 ...
  • 63. 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 ...
  • 64. Í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)
  • 65. 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)
  • 66. 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)
  • 67. Memcache Alguns dados são muito mais acessados que outros (working set), e o AppEngine disponbiliza o Memcache para manter esses dados em RAM
  • 68. 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)
  • 75. ...e altere no app.yaml application: appdojoselito version: 1 runtime: python api_version: 1 Handlers: - url: /favicon.ico static_files: favicon.ico upload: favicon.ico - url: .* script: main.py
  • 82. O poder é de vocês! É preciso estudar e experimentar, mas o App Engine está ao alcance de todos. Basta começar! http://code.google.com/intl/pt-BR/appengine/docs/
  • 83. Dúvidas? Obrigado! @chesterbr http://chester.me http://slideshare.net/chesterbr
  • 84. Créditos e Licenciamento Esta 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