Skip to main content

La Web API en detalle

Esta página describe cómo está construida la Web API de Crono: el controlador base, el enrutado y versionado, la agrupación para la documentación, el tipo de medio y el modelo de errores.

El controlador base CronoApiController​

Todos los controladores de API heredan de CronoApiController (en Crono.Web.Api, dentro de Crono.Web.Comun), que centraliza el comportamiento común:

[ApiController]
[ComprobarSistemaMantenimiento]
[RastreoActividad(Order = 100)]
[Produces(WebAyudante.ACCEPT_CRONO)] // application/vnd.crono.v1+json
[EnableCors("WebApiCorsPolitica")]
[Authorize(AuthenticationSchemes = "Api")]
[IgnoreAntiforgeryToken]
[Route("api/v{version:apiVersion}/[controller]")]
public class CronoApiController : ControllerBase
{
// ayudantes de error: Problema(Error), Problema(List<Error>)
}

De él heredan, entre otras cosas: comprobación de modo mantenimiento, rastreo de actividad, autenticación por esquema Api, política CORS, tipo de medio de Crono y el enrutado versionado.

Enrutado y versionado​

Crono versiona la API con Asp.Versioning. La ruta incorpora la versión y cada acción declara a qué versión responde:

[ApiVersion("1")]
[Route("api/v{version:apiVersion}/rutas-cobranza")]
public class RutasCobranzaController : CronoApiController
{
[HttpGet("funciones"), MapToApiVersion("1")]
public Task<IActionResult> ObtenerFunciones(CancellationToken ct) { /* ... */ }
}

Así conviven versiones distintas del mismo recurso (/api/v1/..., /api/v2/...) sin romper a los clientes existentes.

Agrupación para la documentación​

Cada controlador se asigna a un grupo con [WebApiGrupo(...)], lo que determina bajo qué documento OpenAPI aparece en Swagger. Los grupos disponibles (WebApiGrupoNombres) son: finanzas, comun, configuracion, contenido, identidad, persona, prestamo, recursoshumanos, usuario, venta y plataforma. Cada grupo declara sus versiones (por ejemplo, comun expone 1 y 2).

[WebApiGrupo(WebApiGrupoNombres.Prestamo)]   // aparece en el documento "prestamo1"

Tipo de medio​

La API produce y consume exclusivamente application/vnd.crono.v1+json (constante WebAyudante.ACCEPT_CRONO). Los clientes deben enviar Content-Type y Accept acordes; de lo contrario reciben 415 Unsupported Media Type.

Modelo de errores​

Los errores se devuelven de forma uniforme como problem details. El controlador base traduce el tipo de error del dominio al código HTTP correspondiente:

Tipo de error (ErrorTipo)Código HTTP
NoAutorizado401
Prohibido403
NoEncontrado404
Conflicto409
PrecondicionFallida412
MedioTipoNoSoportado415
Validacion422
Inesperado400

En una acción, devolver un error es tan simple como:

if (algoNoValida)
return Problema(new Error(ErrorTipo.Validacion, "El rango de fechas no es válido."));

return Ok(resultado);

La validación de modelo se aplica automáticamente (atributo de validación de modelo de API), devolviendo 422 con el detalle de los campos inválidos.

Respuestas tipadas​

Documenta el contrato de cada acción con [ProducesResponseType(...)], para que Swagger genere el esquema de la respuesta:

[ProducesResponseType(typeof(List<FuncionRutaDto>), Status200OK)]

Con esto, el controlador base y estos atributos garantizan que todos los endpoints compartan autenticación, versionado, formato y manejo de errores coherentes. Los ejemplos concretos por recurso están en la subsección de ejemplos.