SDK para .NET 9 orientado a construir APIs REST con un enfoque template/reutilizable y bajo coste de desarrollo para aplicaciones específicas. .NET 9 SDK for building REST APIs with a reusable template-based approach and low development cost for specific applications.
Hamekoz.NET.Sdk encapsula patrones repetitivos de CRUD, controladores, DTOs, middleware y registro de dependencias para que cada aplicación de negocio:
- escriba menos código boilerplate,
- mantenga consistencia arquitectónica,
- y extienda comportamiento solo donde aporta valor.
| Proyecto | Rol |
|---|---|
Hamekoz.Api |
Núcleo del SDK: Entity, CrudService, CrudController, excepciones, middlewares y extensiones DI |
Hamekoz.Api.Example |
Aplicación de ejemplo para validar integración y flujo de uso |
Hamekoz.Api.Tests |
Pruebas unitarias del comportamiento base del SDK |
Hamekoz.NET.Sdk.AppHost |
Orquestación local con .NET Aspire |
Hamekoz.NET.Sdk.ServiceDefaults |
Defaults de observabilidad, health checks y resiliencia para Aspire |
EntitydefineIdcomo identidad común.AuditableEntityañade trazabilidad de creación/actualización.ISoftDeletablehabilita borrado lógico sin duplicar lógica por entidad.
ICrudService<TEntity>define contrato estándar.CrudService<TEntity, TDbContext>implementa:- listado completo,
- paginado (
PagedResult<T>), - lectura por id,
- creación,
- actualización,
- borrado físico o lógico según capacidades de la entidad.
La recomendación es heredar de CrudService solo cuando haya reglas de negocio específicas.
CrudController<TEntity, ...>expone endpoints REST estándar:GET /api/{controller}GET /api/{controller}/pagedGET /api/{controller}/{id}POST /api/{controller}PUT /api/{controller}/{id}DELETE /api/{controller}/{id}
- También existe sobrecarga simplificada
CrudController<TEntity>para escenarios con DTO único.
Marcadores para desacoplar operaciones y payloads:
IListItemDtoIDetailDtoICreateDtoIUpdateDtoIFullDto(composición de todos)
- Excepciones esperadas:
ValidationExceptionyNotFoundException. ExceptionHandlingMiddlewaretransforma errores aProblemDetails(application/problem+json) y evita exponer detalles internos en errores 500.
Extensiones DI en ServiceCollectionExtensions:
AddHamekozApi<TDbContext>()registra servicios CRUD para entidades detectadas por reflexión.AddCrudServices<TDbContext>()permite control más explícito del registro template.AddUniqueImplementationOfServices()registra interfaces con implementación única.AddTemplateServices(...)habilita patrones genéricos por herencia.
- Definir entidades que hereden de
Entity. - Declarar
DbSet<TEntity>en elDbContext. - Crear DTOs con interfaces marcador adecuadas.
- Configurar mapping en AutoMapper (
Profile). - Crear controlador heredando
CrudController<...>. - Registrar SDK con
services.AddHamekozApi<TDbContext>(). - Activar middleware con
app.UseHamekozMiddlewares().
net9.0- nullable enabled
- file-scoped namespaces
- nombres en
PascalCase/camelCasesegún.editorconfig - llaves obligatorias en estructuras de control
- commits con Conventional Commits
dotnet restore
dotnet build
dotnet test- Convención sobre configuración: usar registros automáticos por reflexión cuando sea posible.
- Extender en puntos concretos: heredar servicios/controladores base en lugar de reescribir.
- Contratos estables: mantener marker interfaces y
PagedResult<T>como contratos reutilizables. - Errores homogéneos: centralizar manejo de excepciones con middleware.
- Ejemplo ejecutable siempre al día: usar
Hamekoz.Api.Examplecomo plantilla viva para nuevos proyectos.