Skip to content

mo-bruno/api-engsoft

Repository files navigation

Atividade: APIs RESTful com Flask e FastAPI

Disciplina: Engenharia de Software - APIs e Microsserviços
Instituição: Universidade Presbiteriana Mackenzie
Aluno: Bruno
Data: Outubro de 2025


📋 Descrição da Atividade

Este projeto implementa duas APIs RESTful completas ("Hello World" e CRUD de mensagens) utilizando dois frameworks Python populares:

  1. Flask - Framework web minimalista e flexível
  2. FastAPI - Framework moderno com validação automática e documentação interativa

🎯 Objetivos

  1. ✅ Implementar uma aplicação "Hello World" em Flask
  2. ✅ Transformar a aplicação Flask em uma RESTful API completa
  3. ✅ Servir a API Flask utilizando o PyCharm
  4. ✅ Testar os endpoints Flask utilizando o Postman
  5. ✅ Implementar uma aplicação "Hello World" em FastAPI
  6. ✅ Servir a API FastAPI utilizando o Uvicorn
  7. ✅ Testar os endpoints FastAPI utilizando o Postman

📁 Estrutura do Projeto

api-engsoft/
│
├── docs/                           # 📚 Documentação
│   ├── POSTMAN_TESTING_GUIDE.md   # Guia completo de testes
│   ├── QUICK_START.md             # Guia rápido
│   ├── VSCODE_GUIDE.md            # Guia VS Code
│   └── ESTRUTURA_PROJETO.md       # Estrutura detalhada
│
├── postman/                        # 🔧 Arquivos Postman
│   ├── Postman_Collection.json    # Collection importável
│   └── *.postman_test_run.json    # Resultados dos testes
│
├── screenshots/                    # 📸 Capturas de tela
│   ├── FlaskAPIPostman.png        # Testes Flask
│   └── FastAPIPostman.png         # Testes FastAPI
│
├── flask_app.py                    # Aplicação Flask com API RESTful
├── fastapi_app.py                  # Aplicação FastAPI com API RESTful
├── requirements.txt                # Dependências do projeto
├── RELATORIO.md                    # Relatório final
└── README.md                       # Este arquivo

🚀 Instalação e Configuração

Pré-requisitos

  • Python 3.8 ou superior
  • VS Code ou PyCharm (ambas IDEs funcionam perfeitamente)
  • Postman (para testes de API)

📌 Dica: Se estiver usando VS Code, consulte o arquivo docs/VSCODE_GUIDE.md para instruções específicas!

Passo 1: Clonar/Baixar o Projeto

cd d:\Projetos\Mackenzie\api-engsoft

Passo 2: Criar Ambiente Virtual (Recomendado)

python -m venv venv

Ativar o ambiente virtual:

  • Windows (PowerShell):
    .\venv\Scripts\Activate.ps1
  • Windows (CMD):
    venv\Scripts\activate.bat

Passo 3: Instalar Dependências

pip install -r requirements.txt

🔧 Executando as Aplicações

Aplicação Flask

Método 1: Via VS Code

  1. Abra o arquivo flask_app.py no VS Code
  2. Abra o terminal integrado (Ctrl+`)
  3. Execute: python flask_app.py
  4. Ou pressione F5 para debug
  5. A aplicação estará disponível em: http://127.0.0.1:5000

Método 2: Via PyCharm

  1. Abra o arquivo flask_app.py no PyCharm
  2. Clique com o botão direito no arquivo
  3. Selecione "Run 'flask_app'"
  4. A aplicação estará disponível em: http://127.0.0.1:5000

Método 3: Via Terminal (Qualquer IDE)

python flask_app.py

URLs Importantes:

  • Endpoint principal: http://127.0.0.1:5000/
  • API de mensagens: http://127.0.0.1:5000/api/messages

Aplicação FastAPI

Via Terminal (VS Code, PyCharm ou PowerShell)

  1. Abra o terminal integrado (Ctrl+` no VS Code)
  2. Execute:
    uvicorn fastapi_app:app --reload --host 0.0.0.0 --port 8000

Nota: O comando é o mesmo em qualquer IDE ou terminal!

URLs Importantes:

  • Endpoint principal: http://127.0.0.1:8000/
  • API de mensagens: http://127.0.0.1:8000/api/messages
  • Documentação Swagger UI: http://127.0.0.1:8000/docs
  • Documentação ReDoc: http://127.0.0.1:8000/redoc

📚 Endpoints Disponíveis

Flask API (porta 5000)

Método Endpoint Descrição
GET / Hello World básico
GET /api/messages Lista todas as mensagens
GET /api/messages/{id} Obtém mensagem específica
POST /api/messages Cria nova mensagem
PUT /api/messages/{id} Atualiza mensagem existente
DELETE /api/messages/{id} Deleta mensagem

FastAPI (porta 8000)

Método Endpoint Descrição
GET / Hello World básico
GET /api/messages Lista todas as mensagens
GET /api/messages/{id} Obtém mensagem específica
POST /api/messages Cria nova mensagem
PUT /api/messages/{id} Atualiza mensagem existente
DELETE /api/messages/{id} Deleta mensagem

🧪 Testando com Postman

Importar Collection (Mais Rápido)

  1. Abra o Postman
  2. Clique em Import
  3. Selecione postman/Postman_Collection.json
  4. Execute os testes e compare com postman/*.postman_test_run.json

Testes Manuais

Para instruções detalhadas, consulte: docs/POSTMAN_TESTING_GUIDE.md

O guia inclui:

  • ✅ Configuração passo a passo para cada requisição
  • ✅ Exemplos de corpo de requisição (Request Body)
  • ✅ Respostas esperadas para cada teste
  • ✅ Testes de casos de erro (404, 400, 422)
  • ✅ Dicas de organização no Postman
  • ✅ Troubleshooting de problemas comuns

Evidências dos Testes

  • 📊 Resultados: postman/API Engenharia...test_run.json
  • 📸 Screenshots: screenshots/FlaskAPIPostman.png e FastAPIPostman.png
  • 19/19 testes passaram com sucesso!

🔍 Exemplos de Uso

Criar uma Mensagem (POST)

Flask:

POST http://127.0.0.1:5000/api/messages
Content-Type: application/json

{
    "content": "Minha mensagem",
    "author": "Bruno"
}

FastAPI:

POST http://127.0.0.1:8000/api/messages
Content-Type: application/json

{
    "content": "Minha mensagem",
    "author": "Bruno"
}

Listar Todas as Mensagens (GET)

Flask:

GET http://127.0.0.1:5000/api/messages

FastAPI:

GET http://127.0.0.1:8000/api/messages

📊 Comparação: Flask vs FastAPI

Característica Flask FastAPI
Velocidade WSGI (mais lento) ASGI (mais rápido)
Validação Manual Automática (Pydantic)
Documentação Manual Automática (Swagger/ReDoc)
Type Hints Opcional Recomendado
Async/Await Limitado Nativo
Curva de Aprendizado Mais suave Moderada
Casos de Uso APIs simples, MVPs APIs modernas, microserviços

🐛 Troubleshooting

Erro: "ModuleNotFoundError"

Solução: Instale as dependências:

pip install -r requirements.txt

Erro: "Address already in use"

Solução: A porta está ocupada. Use outra porta:

  • Flask: Altere port=5000 para port=5001 em flask_app.py
  • FastAPI: Execute com uvicorn fastapi_app:app --reload --port 8001

Erro: "Connection refused" no Postman

Solução: Verifique se a aplicação está rodando. Confira o terminal do PyCharm.

Erro ao ativar ambiente virtual no PowerShell

Solução: Execute como administrador:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

📖 Recursos de Aprendizado

Documentação Oficial

Conceitos RESTful

  • Métodos HTTP (GET, POST, PUT, DELETE)
  • Status Codes (200, 201, 404, 400, 422, 500)
  • Content-Type e Headers
  • JSON como formato de dados

✅ Checklist da Atividade

  • Implementar Flask "Hello World"
  • Transformar Flask em RESTful API
  • Servir API Flask pelo PyCharm
  • Criar guia de testes Postman para Flask
  • Implementar FastAPI "Hello World"
  • Adicionar métodos REST ao FastAPI
  • Configurar Uvicorn para servir FastAPI
  • Criar guia de testes Postman para FastAPI
  • Documentar diferenças entre Flask e FastAPI
  • Criar README completo

🎓 Aprendizados Principais

  1. RESTful Design: Implementação correta de verbos HTTP e status codes
  2. API Development: Criação de endpoints CRUD completos
  3. Framework Comparison: Entendimento das diferenças práticas entre Flask e FastAPI
  4. Testing: Uso do Postman para validação de APIs
  5. Documentation: Importância de documentação automática (FastAPI) vs manual

📝 Notas Adicionais

  • As aplicações usam um "banco de dados" em memória (lista Python)
  • Os dados são perdidos quando a aplicação é reiniciada
  • Para produção, seria necessário integrar com banco de dados real (PostgreSQL, MongoDB, etc.)
  • FastAPI oferece documentação interativa automática em /docs
  • Ambas as APIs seguem os princípios REST

👨‍💻 Autor

Bruno
Universidade Presbiteriana Mackenzie
Engenharia de Software - APIs e Microsserviços
Outubro de 2025


📄 Licença

Este projeto foi desenvolvido para fins educacionais como parte da disciplina de Engenharia de Software.


Dúvidas? Consulte o arquivo POSTMAN_TESTING_GUIDE.md para instruções detalhadas de teste!

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages