Microservices Com Python
Microservices Com Python
@diegorubin
Onde posso ser encontrado
diegorubin
@diegorubin
http://diegorubin.com
Como construímos software?
- Mobile First
- User eXperience
Design da Aplicação
Esse modelo é chamado de monolítico.
Exemplos:
- Wordpress
- Magento
- Hybris
E modelo microservices?
Vantagens desse modelo
- Desacoplamento
- Facilmente testável
- HTTP, HTTPS
- URI
- JSON
JavaScript Object Notation - JSON
- Formato de dados
- Nulo
- Números
- String
- Boolean
- Lista
- Objetos
JSON - Exemplo
- Formato de dados {
- Números “objeto”: {
}
- Boolean
}
- Lista
- Objetos
Recursos
uri: http://servidor/api/users response status: 200
method: GET response body:
request body: empty [
]
Recursos
uri: http://servidor/api/users response status: 201
method: POST response:
request body: { {
“login”: “user3”, “uid”: “tralala”,
“email”: “user3@mail.com” “login”: “user3”,
} “email”: “user3@mail.com”
}
Recursos
uri: http://servidor/api/users/tralala response status: 200
method: GET response:
request body: empty {
“uid”: “tralala”,
“login”: “user3”,
“email”: “user3@mail.com”
}
Recursos
uri: http://servidor/api/users/tralala response status: 200
method: PATCH response:
request body: { {
“email”: “user3@mail.org” “uid”: “tralala”,
} “login”: “user3”,
“email”: “user3@mail.org”
}
Recursos
uri: http://servidor/api/users/tralala response status: 204
method: DELETE response: empty
request body: empty
Para brincar
Serviços do Google -> https://developers.google.com/
- Controle de reprocessamento
- Consumidores
Service Discovery
- Forma de notificar um serviço
- Autenticação
- Composição de API
- Serviços de monitoria
- Zabbix
- Nagios
- Mock
- Integration Tests
- Load Tests
Python?
Sim, Python!
https://assets.thoughtworks.com/assets/technology-radar-vol-16-pt.pdf
Sim, Python!
elif <condition>: ==, !=, <, <=, >, >= def f2(arg1=1, arg2=”2”):
pass
pass
for i in iterator:
f1(1, 2)
else: print(i)
f2(arg2=”3”, arg1=2)
pass while <condition>: f2()
if <condition>:
break
Python - Sintaxe
class Pai(): class Filho(Pai):
def __init__(self, v): def m(self, a):
self.v = v print(‘filho’)
def m(self, a): super(Filho, self).m(a)
self.a = a
@staticmethod f = Filho(‘v’)
def static(): f.v # ‘v’
print(‘static’) f.m(1)
F.static()
p = Pai(‘v’)
p.v # ‘v’
p.m(1)
P.static()
Python - Sintaxe
try:
pass
except Error as e:
pass
except:
print(‘qualquer outro erro’)
else:
print(‘nao deu erro’)
finally:
print(‘sempre passa por aqui’)
raise Error(‘teste’)
Python - Sintaxe
import caminho.do.modulo.funcao
import caminho.do.modulo.Classe
import caminho.do.modulo.CONSTANTE
caminho.do.modulo.funcao()
c = caminho.do.modulo.Classe()
funcao()
c = Classe()
r = COSNTANTE * 2
Tornado
- Framework WEB
- Foco em performance
- Simples e com vários exemplos de uso
- Possui utilitários
- cliente http
- facilitadores para testes
- integração com oauth
Tornado - Exemplo
import tornado.ioloop Para executar
import tornado.web $ python3 exemplo.py
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
def make_app():
return tornado.web.Application([
(r"/", MainHandler),
])
if __name__ == "__main__":
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
Documentação
- https://docs.python.org/3/
- http://www.tornadoweb.org/en/stable/