Contrato de la API
Lo que tu app tiene que responder. Es un resumen de los requisitos de la spec; si hay diferencia, gana ese archivo.
Todas las rutas cuelgan de tu ApiUrl (la ves en los outputs del stack o con npm run datos).
Alcance de seguridad del workshop
Esta API solo sirve para pruebas temporales del workshop, no es una plantilla de producción. GET /gastos es público y una API key identifica y limita uso, pero no autentica personas. Usa gastos ficticios, no compartas tu key y elimina el backend y Amplify al terminar. El paso extra de Cognito sirve para experimentar con login; antes de llevar una app a producción necesitas revisar autenticación, autorización, CORS, monitoreo y un modelo de amenazas para tu caso.
POST /gastos
Necesita el header x-api-key.
{
"monto": 45,
"descripcion": "café de la esquina",
"categoria": "cafes"
}
| Caso | Status |
|---|---|
| Gasto válido | 201 con el gasto: id, fecha, origen, monto, descripcion, categoria |
Sin monto, monto ≤ 0, categoría que no existe |
400 con { "error": "..." } |
| Sin API key | 403 |
| Rebasa el throttling o la cuota | 429 |
El header opcional x-origen (atajo, curl, pagina o verify) dice de dónde vino el gasto.
GET /gastos
Abierto. Responde 200 con { "gastos": [...] }, los más recientes primero, máximo 200.
Categorías
cafes, snacks, transporte, suscripciones y otros. Se aceptan con acentos y mayúsculas (Cafés), pero se guardan así.
Qué revisa cada checkpoint
| Comando | Revisa |
|---|---|
npm run verify 0 |
Node 22+, npm 11.10+, el .npmrc del repo activo, Git y AWS CLI 2.32+ |
npm run verify 1 |
Sesión activa de AWS y la Región del perfil |
npm run verify 2 <url> |
amplify.yml publica web/ y la página de Amplify responde |
npm run verify 3 |
Sesión activa y el budget mensual de USD 10 |
npm run verify 4 |
Los tests de gastos y de infraestructura, 403 sin key, 201 con key, el GET y 400 con monto negativo en tu API desplegada |
npm run verify 5 <url> |
Amplify responde, config.js apunta a tu API y hay al menos un gasto con origen: atajo |
npm run verify cognito |
401 sin token, 200 con token y el POST con key sigue en 201 |