# API independiente en `api`

API autocontenida para nuevos proyectos (plantilla); no depende de otros monolitos para ejecutar.

## Incluye

- Front controller propio (`api/index.php`)
- Bootstrap y servicios propios en `api/src`
- Seguridad de gateway (`api/src/Infrastructure/Security/GatewaySecurity.php`)
- Dependencias Composer propias (`api/composer.json`)

## Estructura moderna

```text
api/src
  Application/
    Actions/
    Services/
  Domain/
    Entities/
    Repositories/
  Infrastructure/
    Persistence/
      Repositories/
    Security/
  Shared/
    Exceptions/
    Http/
```

- `Application`: casos de uso/servicios de negocio.
- `Domain`: entidades y reglas puras del negocio.
- `Infrastructure`: DB, seguridad y adaptadores técnicos.
- `Shared`: utilidades transversales (HTTP, errores, helpers).

## Guías

- [Adaptar otro proyecto a esta estructura de API](docs/guia-adaptacion-estructura-api.md) (migración por fases, mapa legacy → capas, checklist).
- [Estructura recomendada y diagramas](estructura-api.md) (Slim, Carpetas, Mermaid).

## Instalacion

1. Entrar a `api`.
2. Ejecutar `composer install`.
3. Configurar variables en `api/.env`.
4. Publicar `api/index.php` como front controller en Apache/Nginx.

## Seguridad aplicada

- Cabeceras de hardening HTTP.
- `X-Request-Id` para trazabilidad.
- Validacion de `Content-Type`.
- Rate limiting por IP para rutas sensibles.
- Registro de errores con correlacion por request.

## Observabilidad

- Los logs estructurados de API se guardan siempre en `auth.logs`.
- Las metricas agregadas por minuto se guardan siempre en `auth.metrics_minute`.
- Ambos flujos incluyen `request_id` para correlacionar requests y errores.
- En endpoints autenticados, los access logs intentan incluir `user_id` y `user_role` desde JWT.
