Servidor de API REST desenvolvido em Python e PostgreSQL utilizando: FastAPI, Gunicorn/Uvicorn, ORMAR, Alembic e Poetry.
Vamos iniciar a aplicação com o Docker e Docker Compose, vamos executar o seguinte comando:
docker-compose up -d
Acessar a documentação da aplicação pelas urls:
Algumas observações:
- Na imagem contem a ferramenta Alembic para execução dos scripts de migrate;
- A imagem da aplicação é preparada para o desenvolvimento, caso altere algum arquivo é reiniciado automaticamente;
- Da para acompanhar as querys executadas no PostgreSQL executando o comando:
docker logs --follow --tail=1 apiserver-postgres
- Criar e configurar automações (Poetry);
- Construção do CRUD de usuarios (FastAPI);
- ORM assincrono (ORMAR);
- Aplicando frameworks de boas praticas nas APIs (OpenBanking+Blueprint);
- Construção do login simples e validação dele nas rotas (JWT);
- Centralizar configurações da aplicação (Pydantic);
- Configurar script de migrations e construir adaptador assincrono (Alembic+ORMAR);
- Configurar servidores http e de aplicação (NginX+Gunicorn+Uvicorn);
- Conteinerizar a aplicação (Docker+Docker-Compose);
- Configurar aplicação e banco de dados para funcionar em modo de desenvolvimento;
- Gerenciador de conexões com o Banco de Dados (PgBouncer);
- Cliente de banco de dados para desenvolvimento (psql+pgcli);
- Configurar e aplicar linters de qualidade de codigo (Flake8+Mypy+Interrogate)
- Teste unitario e cobertura (Pytest+Coverage);
- Unificando configurações do projeto (PEP-518);
- Testes orientado a comportamento (Behave);
- Processamento de tarefas assincronas (Celery);
- Processamento de tarefas agendadas (Celery Beat);
- Validação de escopo do token OAUTH2;
Foi usado o Python 3.8
para desenvolvimento.
Python 3.8 foi a escolha devido a melhor compatibilidade entre todas as ferramentas e dependencias utilizadas. Foi identificado algumas incompatibilidades com a versão 3.9, mas acredito que seja algo temporario.
A instalação varia de acordo com o sistema operacional, então aconselho verificar no site do Docker.
Minha preferencia é desenvolver a aplicação no Linux/Ubuntu
ou no WSL2/Ubuntu
.
Para isso é necessario a instalação de algumas dependencias no Ubuntu:
- Pacotes essenciais para compilação:
sudo apt install build build-essential
- Lib para utilização do PostgreSQL:
sudo apt install build libpq-dev
curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python3 -
sudo apt install make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev && \
curl https://pyenv.run | bash
Segue abaixo comandos para facilitar o desenvolvimento e a utilização de ferramentas:
- poetry install : (SOMENTE NA PRIMEIRA VEZ) Vai instalar todas as dependencias (inclusive de desenvolvimento). Antes de executar, eu construi o ambiente com o
Pyenv
:
pyenv install 3.8.10 && pyenv local 3.8.10
- poetry run runserver : Iniciar a aplicação;
- poetry run migrate : Executa as migrations disponiveis;
- poetry run makemigrations : Cria migrations de acordo com as models da aplicação;
- poetry run requirements : Constroi o arquivo de
requirements.txt
para utilização noDockerfile
; - poetry run dbshell : Abre a ferramenta
pgcli
conectada no banco de dados local; - poetry run lint : Verifica a qualidade do código;
- poetry run test : Executa os testes unitarios e a cobertura de testes gerando o relatorio no
htmlcov/index.html
; - poetry run build : Executa os comandos
lint
etest
na sequencia para verificação da qualidade do código e erros de teste; - poetry run fiximports: Organiza e classifica os imports do projeto;
- poetry run codeformatter: Formata o código do projeto usando o
black
;
Comandos inspirados no framework Django. Porem no container não estarão disponiveis, aconselho olhar o arquivo
scripts/poetry.py
onde estão os comandos reais.
Fontes que ajudaram (ou ajudarão) no desenvolvimento desse projeto: