Repository navigation
Flujo completo de creación de handlers en RusterAPI
RusterAPI es un sistema que transforma bases de datos en APIs RESTful a través de varios pasos clave. Te explicaré cómo se crean los handlers y el flujo general del programa:
Arquitectura General
El proyecto sigue una arquitectura modular donde:
Los handlers son funciones que procesan solicitudes HTTP específicas para cada operación
El ApiAdapter es el componente central que conecta la configuración con los manejadores de solicitudes
Los DataSource proporcionan acceso a los datos de cada entidad
Flujo de Creación de Handlers
Inicio y Configuración
El programa carga la configuración (desde un JSON creado en la interfaz frontend)
Se crean los DataSources para cada tabla/entidad configurada
Creación del ApiAdapter
Se crea un ApiAdapter con la configuración y los datasources
El entity_mapper mapea entidades a handlers
Inicialización de Handlers
Para cada entidad configurada:
Se crea un ApiHandlerManager con el datasource correspondiente
El método initialize_endpoints genera los handlers según la configuración
Registro de Endpoints CRUD
Para cada operación CRUD habilitada (create, read, update, delete, list):
Se llama a la función register_X_endpoint correspondiente en crud
Cada función registra un handler con formato "MÉTODO:ruta" (ej: "GET:users" o "POST:api/users")
Los handlers se registran tanto con prefijo API como sin él
Registro de Rutas Personalizadas
Si hay rutas personalizadas configuradas, se registran usando routes::register_custom_endpoint
Manejo de Solicitudes HTTP
El servidor web (Rocket) recibe peticiones y las dirige a los catch-all handlers
Los catch-all handlers construyen un ApiRequest y llaman a process_request
El process_request llama a handle_request del ApiAdapter
Ejecución de Handlers
El método handle_request determina qué entidad y endpoint se está solicitando
Busca el handler adecuado en base a la combinación "MÉTODO:ruta"
Ejecuta el handler encontrado, que realiza la operación en el datasource y genera una respuesta
Generación de Respuesta
El handler devuelve un ApiResponse con código de estado, headers y cuerpo
El resultado se convierte al formato adecuado y se devuelve al cliente
Clave en el Proceso
El sistema utiliza funciones de Rust como Arc para los handlers, permitiendo que sean thread-safe y llamables. Cada handler está registrado con una clave específica que combina el método HTTP y la ruta (por ejemplo, "GET:users/:id"), y cuando llega una solicitud, se busca el handler correspondiente para procesarla.
La búsqueda de handlers es flexible, probando varias combinaciones de rutas (con y sin prefijo API) para encontrar la coincidencia correcta.
Full Changelog: https://github.com/felix-caba/RusterAPI/commits/v0.1