Deploy API Flask usando Heroku

Jonys Arcanjo de Matos
Jul 27 · 5 min read
Image for post
Image for post

Começando simples

Alguns dias atrás, comecei a aprender Flask, eu pretendia criar API web, escolhi então um projeto simples, mas que teria como entrega final o tão sonhado deploy, o projeto escolhido foi “Criar uma API para validar um CEP”, mas na minha cabeça o meu ponto de partida seria criar primeiro um bot realizar este processo de validação dos ceps no site das agências de correio, “eu estava errado”.

Aprendendo com os erros

Fiz isso, criei um pequeno bot que abre o site Correios do Brasil e coloca CEP e retorna se é verdadeiro ou falso. Eu usei o Selênio para isso, eu sei, não foi a escolha melhor, mas como você já poderia prever a solução ficou muito lenta, não era viável.

“Aprendi a lição”

Veja o bot trabalhando:

Image for post
Image for post

Recorrendo ao Oráculo

Fiz algumas pesquisas no google até encontrar uma biblioteca python “pycep-correios” que verifica o CEP no site da agência dos correios, e quando verdadeiro, retorna algumas informações como rua, bairro, cidade, estado. Ótimo, isso atende o meu objetivo.

Minha primeira API web

Eu criei uma função usando a biblioteca mencionada acima “pycep-correios” para validar o código postal, quando true retorna dados como “rua, bairro, cidade, estado”, quando false retorna“CEP incorreto”. Para ver o código da solução no GitHub clique aqui.

Deploy da solução

Eu usei o Heroku para realizar o deploy da solução veja abaixo o processo passo a passo.

O que é Heroku?

Segundo a Wikipedia, o Heroku é uma plataforma em nuvem como o conceito de platform as a service (PaaS) que suporta várias linguagens de programação. Uma das primeiras plataformas em nuvem, o Heroku está em desenvolvimento desde junho de 2007, quando suportava apenas a linguagem de programação Ruby, mas agora suporta Java, Node.js, Scala, Clojure, Python, PHP e Go. Por esse motivo, o Heroku é considerado uma plataforma poliglota, pois possui recursos para um desenvolvedor criar, executar e dimensionar aplicativos de maneira semelhante na maioria das linguagens de programação.

Para iniciar, criei uma conta no site da Heroku, para fazer o mesmo clique aqui , feito isso o proximo passo é instalar o Heroku clique aqui para isso. Existem várias maneiras de instalar o Heroku de acordo com o seu sistema operacional.

Agora, faça o download do Git, porque o Heroku o utiliza-o para deploy.

No terminal, abra a pasta do Projeto.

cd \users\desktop\flask\Brazilian_zipcode_deploy_heroku

Em seguida, digite o código abaixo para fazer login no Heroku.

heroku login

Depois disso, aparecerá a mensagem abaixo.

heroku: Press any key to open up the browser to login or q to exit:

Pressione qualquer tecla para fazer login, em seguida, ele abrirá o site do Heroku para inserir email e senha.

Image for post
Image for post

Feito isso, no terminal, você receberá a mensagem abaixo:

Opening browser to https://cli-auth.heroku.com/auth/cli/browser/b166712b-6219-4430-9f61-2ccef9cdbc83
Logging in... done
Logged in as youraccount@gmail.com

Agora vamos ativar o ambiente virtual, criado anteriormente em nosso projeto.

Para Windows:

venv\Scripts\activate

Para Linux:

source venv/bin/activate

É interessante verificar se todas as bibliotecas necessárias para executar o seu projeto estão instaladas; para isso use o comando abaixo para listar todas elas.

pip freeze

Outro ponto importante é instalar o Gunicorn, ele será usado como nosso servidor WSGI Python.

pip install gunicorn

O Heroku precisa conhecer as dependências do nosso aplicativo para que no momento do deploy crie o ambiente corretamente, utilizei o pip freeze apontando para requirements.txt.

pip freeze > requirements.txt

Note que foi criado um arquivo chamado requirements.txt.

Agora, criaremos o arquivo Procfile, onde será gravado o comando que o Heroku deve usar para executar nosso aplicativo. Basicamente, o mesmo comando que usaríamos para executar o aplicativo localmente. o mesmo deve permanecer na raiz do projeto.

echo "web: gunicorn app:app" > Procfile

Agora vamos criar um repositório no diretório atual usando o comando git init.

git init

Vamos criar um arquivo chamado .gitignore, nele colocaremos todos os arquivos que não queremos que sejam lidos o seu conteúdo, para o nosso cenário colocaremos apenas nosso ambiente virtual “venv”.

Vamos adicionar todos os arquivos ao nosso repositório usando git add.

git add .

Agora vamos criar nosso commit inicial.

Para Windows:

git commit -m "initial commit"

Para Linux:

git commit -m 'initial commit'

Agora vamos criar nosso aplicativo no Heroku usando o comando heroku apps: create [app name], neste caso, eu chamo meu aplicativo api-brazilian-zipcode.

heroku apps:create api-brazilian-zipcode

Assim que criada, a mensagem abaixo será impressa:

Creating ⬢ api-brazilian-zipcode... done
https://api-brazilian-zipcode.herokuapp.com/ | https://git.heroku.com/api-brazilian-zipcode.git

Observe que a URL do API e do repositório git foi retornada na mensagem acima para onde nosso aplicativo foi enviado.

Para o deploy nosso aplicativo, basta enviar as confirmações do repositório local para o repositório heroku, usando o comando git push heroku master.

git push heroku master

Em seguida, aparece uma mensagem abaixo:

remote: Verifying deploy... done.
To https://git.heroku.com/api-brazilian-zipcode.git

Agora vamos abrir o navegdor e passar a URL acima, ou seja, https://api-brazilian-zipcode.herokuapp.com/.

Image for post
Image for post

Vamos verificar se cep 60165–121 é válido ou não, passando a mesma URL como o final /zipcode/60165-121.

Image for post
Image for post

Excelente, como esperado foi retornado dados como rua, bairro, cidade e estado.

Também é importante testar como um cep inválido, então vamos utilizar o cep 6005111 para isso.

Image for post
Image for post

Perfeito, como esperado foi retornado a mensagem “zip code invalid: 6005111”(cep inválido).

Bem, é isso. Se você gostou deste post, um pouco de motivação extra será útil, dando-lhe algumas palmas 👏. Estou sempre aberto a suas perguntas e sugestões. Você pode compartilhar isso no Facebook, Twitter, Linkedin, para que este post possa vir a ser útil para outras pessoas.

Você pode me contatar em:

Linkedin

Github

Referências

Data Hackers

Blog oficial da comunidade Data Hackers

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch

Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore

Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store