Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

[Sugestão] Desafio: Criando rotas no FastAPI

Código criado. Sugiro utilizar a IA do gemini ou gpt no modo aprendizado guiado para entender todo o ciclo do código e o que cada linha significa:

from fastapi import FastAPI, Depends, HTTPException
from sqlalchemy.orm import Session
from typing import List
import models
import schemas
from database import SessionLocal, engine

# Cria as tabelas no PostgresSQL (Caso não existam)
models.Base.metadata.create_all(bind=engine)

app = FastAPI()

def get_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()

@app.post('/estudantes/', response_model=schemas.RespostaEstudante)
def criar_estudante(estudante: schemas.CriarEstudante, db: Session=Depends(get_db)):
    db_estudante = models.Estudante(**estudante.model_dump())
    db.add(db_estudante)
    db.commit()
    db.refresh(db_estudante)
    return db_estudante

@app.get('/estudantes/', response_model=List[schemas.RespostaEstudante])
def ler_estudantes(db: Session = Depends(get_db)):
    estudantes = db.query(models.Estudante).all()
    return estudantes

# Cria uma rota do tipo GET para buscar um estudante pelo ID
@app.get('/estudantes/{id_estudante}', # recebe o id informado no endereço: /estudantes/1/;
         response_model=schemas.RespostaEstudante # Qual será o formato da resposta / conforme schemas, recebe as informações de ID, nome, idade.
        ) 
def ler_estudante(id_estudante: int, db: Session = Depends(get_db)): # Cria a função que será executada quando a rota for acessada
    estudante = (db.query(models.Estudante) 
                  .filter(models.Estudante.id == id_estudante) 
                  .first())
    if estudante is None:
        raise HTTPException(
            status_code=404,
            detail="Item not found"
        )
    else:
        return estudante
1 resposta

Oi, André! Tudo certo por aí?

Obrigado por postar a sua resolução!

Eu notei que você explorou a integração com SQLAlchemy para persistência de dados com Python, usou muito bem a injeção de dependência para gerenciar sessões do banco e por fim compreendeu a relevância da FastAPI para estruturar rotas de forma clara e eficiente.

Para complementar os seus estudos, vou deixar aqui possíveis melhorias:

SQLAlchemy

Uma melhoria seria aplicar `try/except` em operações de banco para capturar erros específicos de integridade ou conexão. Isso garante maior robustez e permite mensagens mais informativas em cenários de falha.

FastAPI

Outra melhoria seria adicionar validações extras nos schemas com Pydantic, como limites de idade ou formatos de strings. Isso ajuda a garantir que os dados recebidos estejam corretos antes mesmo de chegar ao banco.

Continue postando as suas soluções! Além de ganhar pontos de XP na plataforma, você pode ajudar outros estudantes no fórum.

Alguns materiais podem estar em inglês, mas é possível compreendê-los usando o recurso de tradução de páginas do próprio navegador.

Ah, uma pergunta: você gostaria de aprofundar mais em boas práticas de validação com Pydantic ou explorar estratégias avançadas de relacionamento entre tabelas no SQLAlchemy?

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!