Optimización de los middlewares de Laravel: dominio de los grupos de middlewares
- Publicado el 23 octubre, 2024
- Palabras: 384
Al crear aplicaciones complejas con Laravel, administrar varios middleware puede resultar complicado. La función de grupos de middleware de Laravel ofrece una solución elegante para organizar y aplicar varios middleware de manera eficiente. En esta publicación, exploraremos cómo aprovechar los grupos de middleware para mantener limpias las definiciones de ruta y la estructura de la aplicación organizada.

#Comprensión de los grupos de middleware
Los grupos de middleware en Laravel te permiten agrupar varios middleware bajo una única clave. Esto facilita la asignación de varios middleware a rutas o grupos de rutas sin saturar las definiciones de rutas.
#Configuración de grupos de middleware
Para crear un grupo de middleware, deberá utilizar el método appendToGroup o prependToGroup en el archivo bootstrap/app.php de su aplicación. A continuación, le indicamos cómo configurarlo:
use App\Http\Middleware\First;
use App\Http\Middleware\Second;
->withMiddleware(function (Middleware $middleware) {
$middleware->appendToGroup('api', [
First::class,
Second::class,
]);
$middleware->prependToGroup('web', [
First::class,
Second::class,
]);
})
En este ejemplo, estamos creando dos grupos de middleware: "api" y "web". El método appendToGroup agrega middleware al final del grupo, mientras que prependToGroup los agrega al principio.
#Uso de grupos de middleware
Una vez que haya definido sus grupos de middleware, puede asignarlos a rutas o grupos de rutas utilizando la misma sintaxis que el middleware individual:
Route::get('/', function () {
// ...
})->middleware('api');
Route::middleware(['web'])->group(function () {
// ...
});
#Ejemplo práctico
Consideremos un escenario en el que tenemos una API que requiere autenticación, limitación de velocidad y manejo de CORS. Podemos agrupar estos middleware para facilitar la administración:
use App\Http\Middleware\Authenticate;
use App\Http\Middleware\ThrottleRequests;
use Fruitcake\Cors\HandleCors;
->withMiddleware(function (Middleware $middleware) {
$middleware->appendToGroup('api', [
Authenticate::class,
ThrottleRequests::class.':api',
HandleCors::class,
]);
})
Ahora, podemos aplicar este grupo a nuestras rutas API:
Route::prefix('api')->middleware(['api'])->group(function () {
Route::get('/user', function (Request $request) {
return $request->user();
});
Route::get('/posts', [PostController::class, 'index']);
});
Cuando se realiza una solicitud a cualquiera de estas rutas de API, pasará por el middleware de autenticación, limitación de velocidad y CORS en orden. Así es como se ve el proceso:
// Request to /api/user
// 1. Authenticate middleware
// If not authenticated:
{
"message": "Unauthenticated."
}
// 2. ThrottleRequests middleware
// If too many requests:
{
"message": "Too Many Attempts."
}
// 3. HandleCors middleware
// Adds appropriate CORS headers to response
// If all middleware pass:
{
"id": 1,
"name": "John Doe",
"email": "john@example.com"
}
Fuente: Harris Raftopoulos
Inicia la conversación
Hazte miembro de Antonio Jenaro para comenzar a comentar.
Regístrate ahora¿Ya estás registrado? Inicia sesión