Skip to content

llrocha/tdc2021

Repository files navigation

Criando e publicando microsserviços com FastAPI

GitHub license Docker Image CI Python application

Leia este documento em outros idiomas: English, Portuguese


Descrição

Este projeto tem a intenção de demonstrar a construção de um microsserviço utilizando a FastAPI. Nesse projeto vamos criar uma base de CEPs usando SQLite, demonstraremos o uso do LOCUST com a nossa API, como ferramenta de análise de performance. Para criação de nosso ambiente de desenvolvimento, usamos o pipenv

O ambiente de desenvolvimento, está na raíz do projeto, existe um arquivo chamado Pipfile, que contém todas as bibliotecas usadas no projeto, ele é lido pelo pipenv.


Instalação do ambiente de desenvolvimento

Para começar é necessário que você tenha o Python instalado em seu computador, nesse nosso projeto você não precisa instalar o Python com privilégios de administrador. Tutoriais para a instalação do Python estão disponíveis em: https://realpython.com/installing-python/
Aqui vamos usar o Linux, como plataforma de desenvolvimento, caso utilize o Windows, você pode seguir esse tutorial. Caso prefira instalar da Microsoft Store siga esse tutorial.
Para fazer download dos instaladores de Python para Windows clique aqui
Em Linux normalmente o Python já vem instalado, mas você precisa verificar a versão do mesmo, precisa ser 3.8+, caso não tenha essa versão, será necessário instalar, siga esse tutorial, para instalação em Linux.
A seguir como instalar o pipenv: asciicast


Base de CEPs

A base de CEP que foi usada neste projeto, foi encontrada no site CEPlá, você pode baixar a base de: http://cep.la/CEP-dados-2018-UTF8.zip
Existem mais duas bases, eu não sei se elas tem o mesmo formato que essa, portanto pode ser que o programa que constrói a base de CEPs, quebre, caso não esteja no layout da base indicada. O arquivo zip contém um arquivo chamado ceps.txt.

Seu ambiente de testes e desenvolvimento já deve estar preparado com o pipenv

Para rodar o programa, você vai primeiro precisar da base de CEPs, para isso execute:

$ python build_database.py

A seguir como construir o banco de dados usado pelo microsserviço: asciicast


Dando uma olhada no microsserviço

Agora sim, com a base de CEPs construida, você pode começar a executar o nosso microsserviço:

$ uvicorn main:app --reload

Onde:
main é a referência ao arquivo main.py, e app a referência ao objeto da nossa aplicação. Na linha 7 do arquivo main.py você verá:

app = ZipCodeApp()

Para poder acessar e testar, abra http://localhost:8000/

Com funciona? O FastAPI usa o uvicorn para executar seu código, assim temos um servidor WEB para receber nossas requisições, todas as alterações feitas no código, quando executamos o uvicorn com a opção --reload, são atualizadas sem a necessidade de parar e subir novamente a aplicação.


Fazendo o build da base e do conteiner Docker

Para fazer a instalação do docker no windows, você precisa baixar o Docker Desktop, é necessário configurar o windows para poder fazer funcionar o Docker Desktop.
Feito isto, podemos colocar para construir nosso conteiner:

$ docker build . --tag zipcodes-app

Para verificar se seu conteiner, foi construido execute:

$ docker images
REPOSITORY                          TAG                    IMAGE ID       CREATED         SIZE
zipcodes-app                        latest                 9c822e63b8df   5 minutes ago   76.2MB
<none>                              <none>                 7999d1981e82   5 minutes ago   345MB

Executando seu conteiner

Agora que temos nosso aplicação dentro de um conteiner, vamos colocar para rodar e verificar se está tudo funcionando.

$ docker run -p 8000:8000 zipcodes-app

Acesse o browser com o seguinte endereço: http://127.0.0.1:8000/
Se estiver respondendo, você verá algo como:
zipcodeapp


Testando a aplicação com o LOCUST

Para colocar o Locust em funcionamento você precisa executar:

locust -f locust_zipcode.py

Feito isto, você pode abrir http://localhost:8089/, quando você entrar na página a primeira coisa que vai ver é:
locust

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published