O simples bem feito!
>>> API desenvolvida no curso FastAPI do Zero do mestrão @Dunossauro, presença importante na comunidade python. <<<
Fast Zero - Versão síncrona do projeto.
MADR(Meu Acervo Digital de Romances) - Projeto Final de Conclusão do Curso
- Nessa API lidamos com o cadastro, autenticação e autorizações de usuários que podem criar, editar e deletar suas respectivas notas que possuem 5 estados de tarefas: 'draft'= rascunho, 'todo'= para fazer, 'doing'= fazendo, 'done'= feito, 'trash'= descarte
- Agora totalmente assíncrono, o projeto conta com os recursos do FastAPI e do SQLAlchemy para operações mais eficientes e escaláveis.
- TDD e cobertura da API com testes determinísticos.
- Schemas, manipulação de modelos de dados com Pydantic e SQLAlchemy.
- Migrações de banco de dados com alembic.
- Autenticação e autorização com JWT.
- Introdução de conceitos e boas práticas como 12 fatores e variáveis de ambiente.
- Containerização com docker e docker-compose, e criação de uma imagem PostgreSQL.
- Pipeline/Workflow automatizado de Integração Contínua(CI) com GitHub Actions.
- Deploy pela plataforma Fly.io.
- Python 3.12 -> Última versão Python testada.
- FastAPI -> Web Framework de alto desempenho para construir API's com Python.
- uvicorn -> Servidor ASGI.
- SQLAlchemy -> Biblioteca open-source com Toolkit de SQL e Object Relational Mapper(ORM).
- Pydantic -> Validação de dados e alguns gerenciamentos de configuração.
- alembic -> Ferramenta de migração de banco de dados.
- poetry -> Gerenciador de pacotes do Python (usado para configurar o ambiente).
- taskipy -> Executor de tarefas para projetos python.
- ruff -> Formatador e Linter Python extremamente rápido, escrito em Rust.
- ignr -> Plugin para gerar um arquivo .gitignore baseado na linguagem que voce definir.
- PyJWT -> Autenticador entre duas partes, por meio de um token assinado que segue o padrão(RFC-7519)
- pwdlib -> auxiliar moderno p/ hashing de passwords
- psycopg-binary -> Adaptador de PostgreSQL para Python.
- pytest -> Testes simples e poderosos com Python.
- pytest-asyncio -> Plugin do pytest que fornece suporte para corrotinas como funçõoes de teste.
- pytest-cov -> Um plugin para produzir relatórios de cobertura de testes.
- factory-boy -> Uma biblioteca que permite criar objetos de modelo de teste de forma rápida e fácil.
- freezegun -> Uma biblioteca que permite "congelar" o tempo em um ponto específico ou avançá-lo conforme necessário durante os testes.
- testcontainers -> Facilita o uso de contêineres Docker para testes funcionais e de integração.
- Clone o repositório:
git clone https://github.com/amanmdest/fastapi_zero.git- Instale dependências:
poetry install- Para rodar o projeto junto ao banco de dados postgres é necessário criar um arquivo .env na raiz do projeto como o do exemplo abaixo:
.env
DATABASE_URL="postgresql+psycopg://app_user:app_password@localhost:5432/app_db"
SECRET_KEY="8bf15dc4b43e98a24f62891ebf090e6839d99bce6c669de759706a243ef73737" # exemplo token_hex
ALGORITHM="HS256"
ACCESS_TOKEN_EXPIRE_MINUTES=30
POSTGRES_USER=app_user
POSTGRES_DB=app_db
POSTGRES_PASSWORD=app_password- Buildar a imagem e criar/iniciar o conteiner da aplicação junto ao banco de dados (necessário instalar docker-compose):
docker compose up --buildOu para rodar o projeto de forma limitada no servidor local Uvicorn sem banco de dados:
task rune acesse: http://127.0.0.1:8000/docs


