20 lines
1008 B
Markdown
20 lines
1008 B
Markdown
|
|
# Contratos HTTP
|
||
|
|
|
||
|
|
Zod v4 es la fuente de verdad de los DTOs de entrada y salida.
|
||
|
|
Inferir todos sus tipos mediante z.infer<typeof Schema>; no escribir interfaces equivalentes.
|
||
|
|
|
||
|
|
Ubicación: modules/<module>/src/common/dto/request y response.
|
||
|
|
Crear shared solo cuando haya subcontratos estables usados por varias operaciones.
|
||
|
|
|
||
|
|
Los nombres expresan recurso y acción: GetHealthRequestSchema, GetHealthRequestDTO, GetHealthResponseSchema y GetHealthResponseDTO.
|
||
|
|
|
||
|
|
Distinguir campo omitido, null, cadena vacía y colección vacía.
|
||
|
|
Evitar default y transform en contratos de negocio salvo una necesidad justificada.
|
||
|
|
Usar schemas semánticos para UUID y timestamps ISO. Los decimales exactos viajan como cadenas.
|
||
|
|
|
||
|
|
La route valida la entrada una vez; el controller no repite Zod.
|
||
|
|
El navegador valida la respuesta externa antes de consumirla.
|
||
|
|
|
||
|
|
Los builders de respuesta se tipan con el DTO inferido exacto; no duplican interfaces Snapshot.
|
||
|
|
Son deterministas y no contienen lógica de negocio ni acceso a repositorios.
|