Giter Site home page Giter Site logo

api-server-py's Introduction

API SERVER PY

Servidor de API REST desenvolvido em Python e PostgreSQL utilizando: FastAPI, Gunicorn/Uvicorn, ORMAR, Alembic e Poetry.

INICIAR A APLICAÇÃO

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

METAS

  • 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;

DESENVOLVIMENTO

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.

DOCKER E DOCKER-COMPOSE

A instalação varia de acordo com o sistema operacional, então aconselho verificar no site do Docker.

LINUX/UBUNTU

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

POETRY - AUTOMATIZAÇÕES

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 no Dockerfile;
  • 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 e test 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

Fontes que ajudaram (ou ajudarão) no desenvolvimento desse projeto:

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.