Skip to main content

bliblioteca de atividade de ps.

Project description

Exemplos de APIs com banco de dados

  • 01_app_without_design_patterns: exemplo de código que salva um item no banco de dados sem padrão.
  • 02_app_without_dto: exemplo de código que salva um item no banco de dados, que utiliza o padrão DTO.
  • 03_app_mvc: exemplo de código que salva um item no banco de dados, usando o padrão MVC.
  • 04_app_mvc_relation: exemplo de código que salva um item com relacionamento no banco de dados, usando o padrão MVC.

Explicando o código 03_APP_MVC

API de exemplo para gerenciar Heróis usando FastAPI, SQLModel (SQLAlchemy + Pydantic), e o padrão MVC com Repository:

  • Controller (Router) → recebe HTTP
  • Service → regras de negócio
  • Repository → acesso ao banco
  • Model (SQLModel) → entidades e DTOs
  • Database → criação do engine e sessão

✨ Principais recursos

  • Estrutura limpa em camadas (Controller → Service → Repository → DB)
  • SQLModel (tipagem forte + ORM)
  • Injeção de dependência com Depends
  • Tratamento de erros HTTP padronizado
  • Pronto para trocar SQLite por PostgreSQL

📂 Estrutura do projeto


├─ app/
│  ├─ main.py                  # inicialização da app e rotas
│  ├─ database.py              # engine, sessão e inicialização do schema
│  ├─ models.py                # SQLModel: entidades e schemas (Create/Update/Public)
│  ├─ controllers/
│  │  └─ heroes.py             # Controller (Router) da feature "heroes"
│  ├─ services/
│  │  └─ hero_service.py       # Regras de negócio
│  └─ repositories/
│     └─ hero_repository.py    # Acesso ao banco (CRUD)
└─ requirements.txt

🧰 Stack & Requisitos

  • Python 3.10+
  • FastAPI
  • SQLModel
  • Uvicorn

requirements.txt:

fastapi==0.114.2
uvicorn[standard]==0.30.6
SQLModel==0.0.22

Para PostgreSQL, adicione também: psycopg[binary]==3.*


⚙️ Configuração & Execução

  1. Crie o ambiente e instale dependências:
python -m venv .venv
source .venv/bin/activate        # Windows: .venv\Scripts\activate
pip install -r requirements.txt
  1. (Opcional) Defina o banco via variável de ambiente:
  • SQLite (padrão) – já funciona sem configurar nada.

  • PostgreSQL:

    export DATABASE_URL="postgresql+psycopg://app:app@localhost:5432/appdb"
    
  1. Rode a aplicação:
uvicorn app.main:app --reload
  1. Acesse:

🧱 Modelos (resumo)

  • Hero (tabela): id, name, secret_name?, age?
  • HeroCreate (entrada POST)
  • HeroUpdate (entrada PATCH, campos opcionais)
  • HeroPublic (saída nas respostas)

🔌 Endpoints (Heroes)

Base path: /heroes

Método Rota Body Resposta Descrição
POST / HeroCreate HeroPublic Cria um herói
GET / List[HeroPublic] Lista heróis (offset/limit)
GET /{hero_id} HeroPublic Busca por ID
PATCH /{hero_id} HeroUpdate HeroPublic Atualiza campos parciais
DELETE /{hero_id} 204 No Content Remove herói

🧪 Exemplos (cURL)

Criar:

curl -X POST http://127.0.0.1:8000/heroes/ \
  -H "Content-Type: application/json" \
  -d '{"name":"Ada","secret_name":"The Enchantress","age":28}'

Listar:

curl "http://127.0.0.1:8000/heroes/?offset=0&limit=100"

Buscar por ID:

curl http://127.0.0.1:8000/heroes/1

Atualizar (parcial):

curl -X PATCH http://127.0.0.1:8000/heroes/1 \
  -H "Content-Type: application/json" \
  -d '{"name":"Ada Lovelace"}'

Remover:

curl -X DELETE http://127.0.0.1:8000/heroes/1 -i

🧠 Como as camadas se conectam

HTTP (FastAPI)
   ↓
Controller (app/controllers/heroes.py)
   ↓
Service (app/services/hero_service.py)
   ↓
Repository (app/repositories/hero_repository.py)
   ↓
DB Session (app/database.py) + SQLModel (app/models.py)
  • Controller: lida com requisições/respostas e validações de query/path; injeta dependências com Depends.
  • Service: regras de negócio (ex.: checar nome duplicado).
  • Repository: SQL puro via SQLModel/SQLAlchemy (CRUD).
  • Database: engine, sessão e criação de schema.

Reference:

Documento Fast API : Documentação do FAST API.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lib_hero_2-0.1.0.tar.gz (3.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lib_hero_2-0.1.0-py3-none-any.whl (3.2 kB view details)

Uploaded Python 3

File details

Details for the file lib_hero_2-0.1.0.tar.gz.

File metadata

  • Download URL: lib_hero_2-0.1.0.tar.gz
  • Upload date:
  • Size: 3.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for lib_hero_2-0.1.0.tar.gz
Algorithm Hash digest
SHA256 dc70c956c9a5541e3186720e938b049028786ed23d8ceaad977844cdccc84607
MD5 c921cc7f5f8102e453fc1e0b997b6321
BLAKE2b-256 ebd5ed20b7c5be4cb2d811baa1602061ccebf2dd7723efd6883122a9274450fd

See more details on using hashes here.

File details

Details for the file lib_hero_2-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: lib_hero_2-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 3.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for lib_hero_2-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6567d682c3e8607bc6616aa83afdb0a25e963b80a4880c1737a5784a11b5f500
MD5 b493ffb6c31a4116ef0056bbae37f21a
BLAKE2b-256 0657ca9be733d568d6c4b0f0a4b8aeff8059afd0bc96cac3266474f3816d2dcc

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page