Saltar al contenido principal

API REST — Visión general

El backend expone una API REST completa documentada con Swagger UI (springdoc-openapi v2).

Acceso a Swagger UI

EntornoURL
Local (desarrollo directo)http://localhost:8080/swagger-ui.html
Docker (backend expuesto temporalmente)http://localhost:8080/swagger-ui.html tras agregar ports: ["8080:8080"] al servicio backend
ProducciónRequiere configurar un Proxy Host en NPM apuntando a sgi-full-backend:8080

La definición OpenAPI en formato JSON está disponible en /api-docs.

Autenticación

Todas las rutas (excepto las públicas) requieren un JWT Bearer token.

Rutas públicas (sin token)

POST /api/auth/login
POST /api/auth/refresh
GET /swagger-ui/**
GET /api-docs/**
GET /actuator/health

Obtener un token

POST /api/auth/login
Content-Type: application/json

{
"username": "admin",
"password": "Admin123!"
}

Respuesta:

{
"status": "OK",
"message": "Login exitoso",
"data": {
"accessToken": "eyJhbGciOiJIUzI1NiJ9...",
"refreshToken": "eyJhbGciOiJIUzI1NiJ9...",
"tokenType": "Bearer",
"expiresIn": 3600000,
"idUsuario": 1,
"username": "admin",
"rol": "ADMINISTRADOR",
"idArea": 1
}
}

Usar el token

Incluye el header Authorization en todas las requests protegidas:

Authorization: Bearer eyJhbGciOiJIUzI1NiJ9...

Renovar el token (refresh)

El access token expira en 1 hora. Usa el refresh token (válido 24 horas) para obtener uno nuevo:

POST /api/auth/refresh
Content-Type: application/json

{
"refreshToken": "eyJhbGciOiJIUzI1NiJ9..."
}

Formato de respuesta estándar

Todas las respuestas siguen la estructura:

{
"status": "OK",
"message": "Mensaje descriptivo",
"data": { ... }
}

Respuestas paginadas

Los endpoints de listado devuelven:

{
"status": "OK",
"message": "OK",
"data": {
"content": [ ... ],
"page": 0,
"size": 20,
"totalElements": 85,
"totalPages": 5
}
}

Códigos de respuesta HTTP

CódigoSignificado
200 OKOperación exitosa
201 CreatedRecurso creado correctamente
400 Bad RequestError de validación en el request
401 UnauthorizedToken ausente, inválido o expirado
403 ForbiddenToken válido pero sin permisos para la operación
404 Not FoundRecurso no encontrado
409 ConflictRecurso duplicado (DNI, username, código de ejército)
500 Internal Server ErrorError inesperado en el servidor

Paginación y ordenamiento

Los endpoints paginados aceptan los parámetros estándar de Spring:

GET /api/equipos?page=0&size=20&sort=codigoEjercito,asc
ParámetroDefaultDescripción
page0Número de página (base 0)
size20Registros por página
sortvaría por endpointCampo y dirección de ordenamiento