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.

Optimización de los middlewares de Laravel: dominio de los grupos de middlewares

#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"
}
Antonio Jenaro
Antonio Jenaro

Web Developer

Archivado en:

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