API Rest com FastAPI
1. Instalar dependências
Com Python 3.8, você pode criar um ambiente virtual e instalar os pacotes necessários:
python3 -m venv venv
source venv/bin/activate # No Windows: venv\Scripts\activate
pip install fastapi uvicorn
2. Criar estrutura de pastas
Organize seu projeto assim:
cadastro_veiculos/
│
├── main.py
├── models.py
├── schemas.py
└── database.py
3. Criar o arquivo models.py
Vamos simular um banco com uma "lista em memória":
# models.py
from typing import List
# Simulação de banco de dados em memória
fake_db: List[dict] = []
4. Criar o arquivo schemas.py
Define as classes para validação com Pydantic:
# schemas.py
from pydantic import BaseModel, Field
from typing import Optional
class VeiculoBase(BaseModel):
marca: str
modelo: str
ano: int = Field(..., gt=1900, lt=2100)
class VeiculoCreate(VeiculoBase):
pass
class Veiculo(VeiculoBase):
id: int
5. Criar o arquivo database.py
Aqui vamos simular um CRUD simples:
# database.py
from typing import List, Optional
from models import fake_db
from schemas import VeiculoCreate, Veiculo
def get_all_veiculos() -> List[Veiculo]:
return fake_db
def get_veiculo_by_id(veiculo_id: int) -> Optional[Veiculo]:
for v in fake_db:
if v["id"] == veiculo_id:
return v
return None
def create_veiculo(veiculo: VeiculoCreate) -> Veiculo:
novo_id = len(fake_db) + 1
veiculo_dict = veiculo.dict()
veiculo_dict["id"] = novo_id
fake_db.append(veiculo_dict)
return veiculo_dict
def delete_veiculo(veiculo_id: int) -> bool:
for i, v in enumerate(fake_db):
if v["id"] == veiculo_id:
del fake_db[i]
return True
return False
6. Criar o arquivo main.py
Aqui estará o ponto de entrada da API:
# main.py
from fastapi import FastAPI, HTTPException
from schemas import Veiculo, VeiculoCreate
import database
app = FastAPI(title="API de Cadastro de Veículos")
@app.get("/", tags=["Home"])
def home():
return {"mensagem": "Bem-vindo à API de veículos"}
@app.get("/veiculos", response_model=list[Veiculo])
def listar_veiculos():
return database.get_all_veiculos()
@app.get("/veiculos/{veiculo_id}", response_model=Veiculo)
def buscar_veiculo(veiculo_id: int):
veiculo = database.get_veiculo_by_id(veiculo_id)
if not veiculo:
raise HTTPException(status_code=404, detail="Veículo não
encontrado")
return veiculo
@app.post("/veiculos", response_model=Veiculo, status_code=201)
def adicionar_veiculo(veiculo: VeiculoCreate):
return database.create_veiculo(veiculo)
@app.delete("/veiculos/{veiculo_id}", status_code=204)
def remover_veiculo(veiculo_id: int):
sucesso = database.delete_veiculo(veiculo_id)
if not sucesso:
raise HTTPException(status_code=404, detail="Veículo não
encontrado")
7. Rodar a API
No terminal:
uvicorn main:app --reload
Acesse no navegador: http://127.0.0.1:8000/docs
A FastAPI cria uma documentação interativa automaticamente!
8. Testar (exemplos)
Na documentação /docs, você pode:
POST /veiculos – Adicionar um veículo
{
"marca": "Toyota",
"modelo": "Corolla",
"ano": 2020
}
●
● GET /veiculos – Listar todos
● GET /veiculos/{id} – Buscar por ID
● DELETE /veiculos/{id} – Remover
Gerando o Cliente para a API
1. Instale o requests (caso ainda não tenha)
pip install requests
2. Código do Cliente REST (cliente_api.py)
import requests
BASE_URL = "http://127.0.0.1:8000"
def listar_veiculos():
response = requests.get(f"{BASE_URL}/veiculos")
if response.status_code == 200:
print("Veículos cadastrados:")
for v in response.json():
print(v)
else:
print("Erro ao listar veículos.")
def buscar_veiculo_por_id(veiculo_id):
response = requests.get(f"{BASE_URL}/veiculos/{veiculo_id}")
if response.status_code == 200:
print("Veículo encontrado:", response.json())
else:
print("Veículo não encontrado.")
def cadastrar_veiculo(marca, modelo, ano):
payload = {
"marca": marca,
"modelo": modelo,
"ano": ano
}
response = requests.post(f"{BASE_URL}/veiculos", json=payload)
if response.status_code == 201:
print("Veículo cadastrado com sucesso:", response.json())
else:
print("Erro ao cadastrar veículo:", response.text)
def remover_veiculo(veiculo_id):
response = requests.delete(f"{BASE_URL}/veiculos/{veiculo_id}")
if response.status_code == 204:
print("Veículo removido com sucesso.")
else:
print("Erro ao remover veículo.")
if __name__ == "__main__":
print("### Cliente para API de Veículos ###\n")
print("1. Listar veículos")
listar_veiculos()
print("\n2. Cadastrar veículo")
cadastrar_veiculo("Chevrolet", "Onix", 2022)
print("\n3. Listar veículos novamente")
listar_veiculos()
print("\n4. Buscar veículo por ID = 1")
buscar_veiculo_por_id(1)
print("\n5. Remover veículo com ID = 1")
remover_veiculo(1)
print("\n6. Listar veículos novamente")
listar_veiculos()
O que o script faz:
1. GET /veiculos – Lista todos os veículos
2. POST /veiculos – Cadastra um novo veículo
3. GET /veiculos/1 – Busca um veículo por ID
4. DELETE /veiculos/1 – Remove um veículo
5. Lista novamente para mostrar o efeito das operações
Observações
● A API FastAPI precisa estar em execução (uvicorn main:app --reload)
antes de rodar esse script.