Descripción General de la Estructura de Directorios
Flujo de una Petición (Request)
Una petición típica fluye a través de las siguientes capas:- Punto de Entrada Hono (
src/app/index.ts): La petición llega primero a la instancia principal de la aplicación Hono. - Middleware Global (
src/app/index.ts):- Caché: El middleware
hono/cacheverifica si existe una respuesta válida en caché para la URL de la petición y la cabeceraAccept-Language. Si hay un acierto de caché (cache hit), la respuesta almacenada en caché se devuelve inmediatamente. - (Aquí se podrían agregar otros middleware globales)
- Caché: El middleware
- Enrutamiento (
src/app/index.ts->src/features/.../routes.ts): Hono hace coincidir la ruta de la petición con la ruta apropiada definida dentro de los módulos de características (p. ej.,/api/v1/countries/...). - Middleware de Validación (
src/features/.../routes.ts): El middleware@hono/zod-validatorvalida los parámetros de ruta (paramSchema) y/o los parámetros de consulta (querySchema) utilizando los esquemas Zod definidos envalidators.ts. Si la validación falla, se genera automáticamente una respuesta 400 Bad Request. - Manejador de Ruta (
src/features/.../routes.ts): Si la validación es exitosa, se ejecuta la función manejadora de ruta específica (p. ej.,handleGetCountryByName). - Lógica de Servicio (
src/features/.../service.ts): El manejador típicamente llama a funciones dentro del módulo de servicio correspondiente. El servicio contiene la lógica de negocio principal:- Recupera datos preprocesados (p. ej., de estructuras
Mapcreadas al inicio). - Aplica lógica de ordenamiento basada en los parámetros de la petición (
sortData.ts). - Aplica lógica de filtrado y aplanamiento de campos (
filterData.ts).
- Recupera datos preprocesados (p. ej., de estructuras
- Utilidades (
src/shared/lib/utils/,src/shared/lib/i18n/): Las funciones de servicio utilizan funciones de utilidad compartidas para tareas como normalización de cadenas, ordenamiento, filtrado y búsqueda de traducciones. - Generación de Respuesta: El manejador recibe los datos procesados del servicio y utiliza
c.json()para construir la respuesta JSON. - Almacenamiento en Caché (Cache Miss): Si la petición no se sirvió desde la caché inicialmente, la respuesta generada (si es cacheable) se almacena en la caché a través de la API de Caché antes de enviarla al cliente.
- Manejo de Errores (
src/app/index.ts): Si ocurre algún error durante el proceso (p. ej., datos no encontrados que lanzan unaHTTPException, error de validación o error inesperado del servidor), el manejador globalapp.onErrorlo captura. Registra el error (si es apropiado), determina el código de estado correcto, recupera un mensaje de error traducido usandogetTranslatedMessage.ts, y devuelve una respuesta de error JSON consistente ({ error: { status, message } }).
Componentes Clave
- Hono: Framework web ligero que proporciona enrutamiento, middleware y manejo de contexto.
- Zod: Librería utilizada para la validación de entradas (parámetros de ruta/consulta).
- TypeScript: Proporciona tipado estático para mejorar la calidad y mantenibilidad del código.
- Preprocesamiento de Datos: Los servicios (
countries/service.ts,region/service.ts) preprocesan los datos JSON estáticos en estructurasMapeficientes al iniciar la aplicación para búsquedas rápidas (complejidad temporal promedio O(1) para búsquedas por nombre/región). - Internacionalización (i18n): Los mensajes de error y potencialmente otras cadenas se traducen según la cabecera
Accept-Languageutilizando la lógica enshared/lib/i18n/y los mensajes definidos enshared/config/i18n/. - API de Caché de Cloudflare Workers: Se utiliza a través del middleware
hono/cachepara el almacenamiento en caché en el borde (edge caching), mejorando significativamente el rendimiento para peticiones repetidas. La cabeceraVary: Accept-Languageasegura el almacenamiento en caché correcto para diferentes idiomas.