Skip to content

Initial release

Latest

Choose a tag to compare

@MaNoLiN-CRV MaNoLiN-CRV released this 21 May 11:54

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