Guía FastAPI
Integrantes del grupo
- Juan Camilo Molina Mussen - A00399775
- Sharik Camila Rueda Lucero - A00399189
Wordle API — FastAPI | SQLAlchemy | PostgreSQL | Docker
¿Qué es FastAPI?
FastAPI es un framework moderno para construir APIs en Python.Aprovecha tipos de Python para validación automatica de datos y genera documentación interactica(OpenAPI/Swagger). Esta pensado para trabajar de forma asincrona con async/await.
¿Por qué usar FastAPI aquí?
- Validación con Pydantic
- Documentación OpenAPI lista
- Integración con SQLAlchemy y Alembic
¿Por qué usar PostgreSQL combinado con FastAPI y SQLAlchemy?
- Estabilidad y potencia: PostgreSQL es robusto, relacional y ampliamente usado en producción.
- SQLAlchemy 2.0: capa ORM madura, tipada y con un excelente ecosistema.
- Docker: facilita levantar la BD y el backend igual en todas las máquinas.
Configuracióm del entorno de desarrollo
Requisitos previos
- Python 3.11+
- Docker
- pip / venv
Stack y arquitectura del proyecto
- FastAPI
- SQLAlchemy 2.0 + Alembic
- PostgreSQL
- Arquitectura por features: words, games, guesses
app/
├─ api/router.py
├─ core/{config, middleware, lifespan}.py
├─ db/{base.py, session.py}
├─ features/
│ ├─ words/
│ ├─ games/
│ └─ guesses/
└─ main.py
Clonar/instalar dependencias
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
Base de datos con Docker
services:
db:
image: postgres:17
container_name: wordle-postgres
environment:
POSTGRES_USER: wordle
POSTGRES_PASSWORD: wordle
POSTGRES_DB: wordle
ports:
- "5431:5432"
volumes:
- wordle_pgdata:/var/lib/postgresql/data
volumes:
wordle_pgdata:
Levanta la BD:
docker compose up -d
Variables de entorno
DEBUG=true
DATABASE_URL=postgresql+psycopg://wordle:wordle@localhost:5431/wordle
ALLOWED_ORIGINS=["http://localhost:5173"]
Migraciones con Alembic
Aplicar migraciones:
cd wordleAPI/
alembic upgrade head
Levantar la API
cd wordleAPI/
fastapi dev app/main.py
Endpoints principales
Words
- GET
/api/v1/words - GET
/api/v1/words/random - GET
/api/v1/words/exists?text=PERRO - POST
/api/v1/words/bulk
Games
- POST
/api/v1/games - GET
/api/v1/games/{id}
Guesses
- POST
/api/v1/guesses/{game_id}
Probar rápido (cURL o Postman)
Sembrar palabras
curl -X POST "http://127.0.0.1:8000/api/v1/words/bulk" -H "Content-Type: application/json" -d '{"words":["PERRO","SALSA","LIMON","NIEVE","PLAZA"]}'
Crear partida
curl -X POST "http://127.0.0.1:8000/api/v1/games" -H "Content-Type: application/json" -d '{}'
Hacer un intento
curl -X POST "http://127.0.0.1:8000/api/v1/guesses/1" -H "Content-Type: application/json" -d '{"text":"PERRO"}'
Sugerencia: Cuando levantes el servidor con
fastapo dev app/main.pyentra a http://127.0.0.1:8000/docs. Allí podrás probar los endpoints directamente o, desde el botón superior izquierdo, descargar el JSON de OpenAPI (
/openapi.json) e importarlo en Postman para tener la colección lista automáticamente.
Frontend — React + Vite + Tailwind
Requisitos
- Node.js 18+ y npm
- La API corriendo en
http://127.0.0.1:8000(o la URL que definas)
Estructura básica
wordle-frontend/
├─ src/
│ ├─ components/
│ │ ├─ Header.jsx
│ │ ├─ StatusBar.jsx
│ │ ├─ AttemptsCounter.jsx
│ │ ├─ Loading.jsx
│ │ ├─ GameBoard/
│ │ │ ├─ GameBoard.jsx
│ │ │ ├─ Row.jsx
│ │ │ └─ Cell.jsx
│ │ └─ Keyboard/
│ │ ├─ Keyboard.jsx
│ │ └─ Key.jsx
│ ├─ pages/
│ │ └─ GamePage.jsx
│ ├─ routes/
│ │ └─ routes.jsx (opcional si usas router)
│ ├─ services/
│ │ ├─ axiosService.js
│ │ ├─ gameService.js
│ │ ├─ wordService.js
│ │ └─ guessService.js
│ ├─ index.css
│ └─ main.jsx
├─ index.html
├─ tailwind.config.js
└─ vite.config.js
Variables de entorno (Frontend)
Crea un archivo .env en la raíz del frontend:
VITE_BASE_URL=http://127.0.0.1:8000
Levantar el frontend
cd wordle-frontend
npm install
npm run dev
# http://127.0.0.1:5173
La API debe estar corriendo (ver sección de backend de tu guía).