El router o enrutador permite asociar una URL con un recurso del servidor, casi siempre generado de manera dinámica. Lo primero que se debe considerar, es la arquitectura general del framework y el modo en particular en que se va a modelar el enrutamiento.
Hay dos modelos muy extendidos, y que son los que traeremos aquí para el análisis.
Router de reglas individuales
En este modelo, muy difundido entre los frameworks, las reglas deben ser declaradas explícitamente para cada ruta de la aplicación. La ventaja de este modelo es, sin dudas, su flexibilidad. La desventaja es que deben cargarse todas las reglas y buscar una coincidencia con la URL consultada, lo que genera un coste de procesos no menor.
Router de reglas generales
Por el otro lado, este modelo muy difundido entre los CMS, plantea un sistema de reglas generales o convenciones que permiten encontrar un recurso en particular. Estas reglas generales se basan en, como mínimo, dos parámetros: un módulo o controlador y una tarea dentro de dicho módulo. También, como veremos más adelante, puede existir un punto de acceso. La ventaja de este modelo es la velocidad de ejecución, la desventaja es su falta de flexibilidad a la hora de generar URLs.
Algunos requisitos
A continuación, analizaremos algunos requisitos que debe tener un enrutador, sobre todo, para aquellos de reglas generales.
- Debe tener distintos puntos de acceso, por ejemplo:
front,admin,api,console. - Debe prever valores por defecto para los 3 niveles básicos del enrutador:
access-point/module/task - Los niveles básicos se deben poder renombrar desde las configuraciones. Es decir, si por ejemplo queremos traducir el módulo que se llama «posts», debe ser posible pasar a renombrarlo y, desde la url llamarlo con el nombre de «publicaciones».
- Los parámetros de la URL reescrita deben pasarse como un arreglo numérico
employees/{id}, o como un arreglo asociativo:employees/sector/{sector}
Crear URLs con un método
La clase que analiza las URLs debería ser la misma que las crea. En este sentido, generar de manera dinámica las URLs posibilita:
- Optar por reescribirlas (o no), utilizando htaccess.
- Optar por configurar el idioma a través de las mismas.
- Reescribir el nombre de los módulos.
Conclusión
Los enrutadores individuales tienen como desventaja el rendimiento, sin embargo, éste puede mejorar significativamente si se pre-procesan las reglas y se guardan en caché.
Los enrutadores de reglas generales pierden flexibilidad, pero es posible utilizar el módulo y el resto de la URL analizarla dentro de éste, lo que daría paso a un modelo mixto.
En fin, son varias las posibilidades de implementación de uno u otro modelo. El límite es la creatividad.