Routing
El enrutamiento en Lumen permite definir cómo la aplicación responde a las solicitudes HTTP que recibe, asociando URLs específicas a funciones o controladores que procesan esas solicitudes. Lumen ofrece un sistema de routing simple pero potente, compatible con las convenciones de Laravel.
Rutas básicas
Las rutas se definen normalmente en el archivo routes/web.php o routes/api.php. La sintaxis básica es:
$router->get('/saludo', function () {
return '¡Hola mundo!';
});
En este ejemplo, una solicitud GET a /saludo devuelve el texto “¡Hola mundo!”. También se pueden definir rutas para otros métodos HTTP:
$router->post('/usuarios', 'UsuarioController@crear');
$router->put('/usuarios/{id}', 'UsuarioController@actualizar');
$router->delete('/usuarios/{id}', 'UsuarioController@eliminar');
Rutas con parámetros
Lumen permite capturar valores dinámicos en las rutas mediante parámetros encerrados entre llaves {}:
$router->get('/usuarios/{id}', function ($id) {
return "Usuario con ID: $id";
});
Se pueden definir múltiples parámetros en la misma ruta:
$router->get('/usuarios/{id}/posts/{postId}', function ($id, $postId) {
return "Usuario $id, Post $postId";
});
Rutas con restricciones y expresiones regulares
Es posible agregar restricciones a los parámetros para validar el formato de los valores:
$router->get('/usuarios/{id:[0-9]+}', function ($id) {
return "Usuario con ID numérico: $id";
});
Grupos de rutas
Los grupos de rutas permiten aplicar middleware, prefijos o namespaces de forma conjunta:
$router->group(['prefix' => 'api/v1', 'middleware' => 'auth'], function () use ($router) {
$router->get('/usuarios', 'UsuarioController@listar');
$router->post('/usuarios', 'UsuarioController@crear');
});
En este ejemplo, todas las rutas dentro del grupo compartirán el prefijo api/v1 y requerirán pasar el middleware auth.
Buenas prácticas y convenciones en el routing
- Mantener las rutas organizadas en archivos separados (
web.phppara rutas de frontend yapi.phppara APIs). - Usar nombres descriptivos y coherentes para rutas y parámetros.
- Aplicar middleware de manera centralizada para funcionalidades transversales como autenticación o logging.
- Utilizar prefijos y versionado de API para mantener compatibilidad al evolucionar la aplicación.
- Evitar lógica compleja dentro de closures; delegar siempre a controladores o servicios.