0% acharam este documento útil (0 voto)
0 visualizações7 páginas

API Rest Com Python FastAPI

Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
0 visualizações7 páginas

API Rest Com Python FastAPI

Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 7

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.​

Você também pode gostar