Nesta aula iremos aprender sobre o protocolo HTTP e sua aplicação para o desenvolvimento de APIs que podem ser utilizadas em diversos apps (Mobile, IoT e Web).
F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 - _ . ~ Caracteres com significado especial: ! * ' ( ) ; : @ & = + $ , / ? % # [ ] http://en.wikipedia.org/wiki/Percent-encoding
• Uma ação / verbo • Caminho do arquivo ou pasta solicitado • O endereço do servidor • Informações de cabeçalho • Dados da requisição (ex: um formulário)
GMT Server: Apache/2.2.14 (Win32) Last-Modified: Sat, 20 Nov 2012 07:16:26 GMT Content-Length: 44 Content-type: text/html <html><body><h1>Olá Mundo!</h1></body></html> Status da resposta Headers / Cabeçalho Linha em branco Corpo da resposta
/ Atualizado / Deletado 301 Movido a outro endereço 401 Não autorizado 403 Não permitido 404 Não encontrado 500 Erro interno do servidor http://en.wikipedia.org/wiki/List_of_HTTP_status_codes
e decidir qual aplicação vai ser executada. Eles tem o papel de mapear o endereço com a função. GET /endereco class Hello(Request): def get(self): # Executa ação!
requisição é iniciada, é boa para iniciar a conexão com o banco de dados por exemplo. import sqlite3 class UrlHandler(webapp2.RequestHandler): def dispatch(self): self.dbconn = sqlite3.connect('db.sqlite3')
todos os dispositivos models.Devices.get_by_id(XXX) # Retorna o dispositivo com ID models.Devices.get_by(id=XXX, foo='a') # Retorna o dispositivo com o parametro models.Devices.count() # Retorna a quantidade de dispositivos # Medidas models.Medidas.get_all() # SELECT * FROM medidas models.Medidas.get_by_id(XXX) # ... WHERE id=XXX models.Medidas.get_by(abc=XXX, foo='a') # ... WHERE abc=XXX AND foo='a' models.Medidas.count()
salva no banco de dados d = models.Devices(nome='ABC', obs=123) print d["nome"] # => ABC print d["obs"] # => 123 d.save() # Executa o INSERT no banco de dados print d["id"] # => X (o ID do item após ser inserido no banco) d.delete()
= 123 d = models.Devices.get_by_id(123) print d["nome"] # Exibe o nome salvo no banco d["nome"] = "Foo Bar" # Altera o nome d.save() # Realiza o UPDATE
= models.Device.get_by_id( self.request.params.get('id') ) if not device: self.abort(404) device.delete() self.response.content_type = 204 # Deletado com sucesso api.py
device_id): # ... if not medida.temperatura >= 5: msg = MIMEText(''' Atencao! O dispositivo #{device_id} esta com a temperatura de {temperatura}C. '''.format(**medida)) msg['Subject'] = 'Temperatura alta!' s = smtplib.SMTP('smtp.gmail.com:587') s.starttls() s.login('username', '*****') s.sendmail('', '', msg.as_string()) s.quit() https://docs.python.org/2/library/email-examples.html