Skip to content

Instantly share code, notes, and snippets.

@JoaoRoccella
Last active May 20, 2025 13:44
Show Gist options
  • Select an option

  • Save JoaoRoccella/a698548559aaca644e9ebe11b8de81ca to your computer and use it in GitHub Desktop.

Select an option

Save JoaoRoccella/a698548559aaca644e9ebe11b8de81ca to your computer and use it in GitHub Desktop.
Tarefa 2DSI FastAPI

Critérios de Avaliação

Defesa Técnica do Projeto "API com FastAPI"

Qualidade e Organização do Código

Critério Descrição
Código limpo Uso de identação, espaçamento, nomes descritivos de variáveis, funções e classes. Adoção de convenções como o PEP 8.
Reutilização e modularização Evita repetições, utiliza funções e métodos reutilizáveis, organiza o código por responsabilidades.
Separação clara de camadas (MVC simplificado) Estrutura clara com modelos e controladores
Comentários relevantes e documentação interna Comentários que explicam por que algo é feito (não o óbvio), docstrings em funções e classes.

Arquitetura e Padrões de Projeto

Critério Descrição
Uso de padrão de projeto Uso consciente de um padrão organizacional (ex: repository pattern, service layer), mesmo que simples, mas com consistência.
Clareza na separação de responsabilidades Cada arquivo ou módulo tem uma função bem definida e coesa.
Justificativa da arquitetura escolhida Capacidade de explicar por que estruturou o projeto daquela maneira.

Ambiente e Dependências

Critério Descrição
Uso de ambiente virtual Criação e ativação de venv, ausência de dependências globais.
Arquivo requirements.txt completo e funcional Todas as bibliotecas utilizadas estão devidamente listadas.
Uso correto do .env com python-dotenv Senhas e dados sensíveis estão armazenados em variáveis de ambiente.

Uso de Bibliotecas e Recursos do FastAPI

Critério Descrição
Utilização de FastAPI com tipagem explícita (typing) Anotações com str, int, List, Optional, etc.
Models ou Schemas com Pydantic Modelos bem definidos com validações apropriadas.
Endpoints bem definidos com anotações e dependências Uso de @app.get(), @app.post() com summary, description, responses.
Geração automática da documentação Documentação acessível e coerente no OpenAPI (Swagger) e Redoc.

Segurança, Integridade e Boas Práticas

Critério Descrição
Senhas, tokens e conexões protegidos Uso correto de .env ou config.py e controle do ciclo de vida da conexão (por exemplo com with).
Segurança contra erros comuns (ex: SQL Injection) Se aplicável, uso de mecanismos de proteção.
Tratamento de exceções Uso de try/except com mensagens claras e log de erros.
Respostas HTTP padronizadas Uso correto dos status (200, 201, 404, 422, 500 etc.), com mensagens claras ao usuário e à API.

Banco de Dados

Critério Descrição
Consistência do modelo de dados Estrutura relacional coerente entre tabelas.
Scripts de criação da base (DDL) Existência de scripts para criação da estrutura ou uso de ORM simples.
Integridade referencial e validações Verificação de dados inválidos, duplicados ou fora do padrão esperado.

Comunicação e Documentação

Critério Descrição
Clareza e completude da documentação da API Uso dos recursos de FastAPI + explicações no README do projeto.
Documentação técnica complementar Inclusão de README com instruções para execução local, descrição do projeto, estrutura e tecnologias.
Comunicação clara durante a defesa Explicações técnicas objetivas, domínio conceitual e capacidade de resposta às perguntas da banca.

Originalidade e Autenticidade

Critério Descrição
Originalidade do código Evita cópia direta de exemplos prontos ou código gerado por IA sem compreensão.
Domínio técnico A equipe demonstra pleno entendimento do que foi desenvolvido.
Justificativas técnicas Para cada escolha feita (estrutura, nomeclaturas, divisão de arquivos, validações etc.).

Apresentação e Defesa Técnica

Critério Descrição
Apresentação da arquitetura geral do projeto Explicação do fluxo de dados, camadas, bibliotecas utilizadas.
Demonstração do funcionamento da API Testes reais via OpenAPI (Swagger) ou ferramenta como Postman.
Capacidade de responder a questionamentos Tanto conceituais quanto específicos do código apresentado.
Clareza na comunicação Vocabulário técnico correto, objetividade, didática ao expor ideias.

Início rápido com o FastAPI

Começando um novo projeto com FastAPI.

  1. Criar um ambiente virtual
python -m venv .venv
.venv\Scripts\Activate.ps1 # Windows PowerShell
source .venv/Scripts/activate # Git Bash
  1. Criar o arquivo .gitignore com o seguinte conteúdo:
# Python
__pycache__/
.venv/
  1. Instalar o FastAPI e Conector do MySQL
pip install fastapi[standard]
pip install mysql-connector-python
  1. Exportar as dependências
pip freeze > requirements.txt
  1. Criar a seguinte estrutura de projeto:
├── app/
│   ├── __init__.py
│   ├── main.py
  1. Editar o arquivo main.py com o seguinte conteúdo:
from typing import Union
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}

@app.get("/items/{item_id}/{query}")
def read_item(item_id: int, query: Union[str, None] = None):
    return {"item_id": item_id, "query": query}
  1. Executar a aplicação FastAPI
fastapi dev # Ambiente de desenvolvimento
fastapi run # Ambiente de produção
  1. Testar as requisições e respostas com a extensão Thunder Client

"Lista Must Watch"

Você foi contratado para desenvolver uma API RESTful com Python (FastAPI) e MySQL que permita a gestão de uma lista pessoal de séries que o usuário deseja assistir (tipo “must watch”). Essa API deve permitir o cadastro, consulta, atualização e exclusão de séries, assim como a associação de atores, categorias, motivos para assistir e avaliações pessoais.

O sistema deve contemplar os seguintes recursos:

  • Cadastro e listagem de séries;
  • Cadastro de atores e associação com séries;
  • Classificação por categorias (ex: comédia, drama, ação);
  • Inclusão de motivos pessoais para assistir uma série;
  • Avaliação pessoal após assistir (nota e comentário).

Modelo de Dados

Tabela: serie

Campo Tipo Descrição
id INT (PK) Identificador único
titulo VARCHAR(100) Título da série
descricao TEXT Sinopse breve
ano_lancamento INT Ano de estreia
id_categoria INT (FK) Categoria principal

Tabela: categoria

Campo Tipo Descrição
id INT (PK) Identificador
nome VARCHAR(50) Nome da categoria

Tabela: ator

Campo Tipo Descrição
id INT (PK) Identificador
nome VARCHAR(100) Nome do ator

Tabela: ator_serie (relacionamento N:N)

Campo Tipo Descrição
id_ator INT (FK) Relacionado à tabela ator
id_serie INT (FK) Relacionado à tabela serie
personagem VARCHAR(100) Nome do personagem na série

Tabela: motivo_assistir

Campo Tipo Descrição
id INT (PK) Identificador
id_serie INT (FK) Série associada
motivo TEXT Razão pessoal para assistir

Tabela: avaliacao_serie

Campo Tipo Descrição
id INT (PK) Identificador
id_serie INT (FK) Série avaliada
nota INT Nota de 0 a 10
comentario TEXT Comentário pessoal
data_avaliacao DATE Data da avaliação
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment