Dominando los middlewares de Laravel: procesamiento previo y posterior a las solicitudes
- Publicado el 22 octubre, 2024
- Palabras: 562
Al crear aplicaciones web con Laravel, controlar el flujo de solicitudes HTTP es crucial. El middleware de Laravel proporciona un mecanismo poderoso para filtrar y manipular las solicitudes HTTP que ingresan a su aplicación. En esta publicación, analizaremos en profundidad cómo puede aprovechar el middleware para el procesamiento previo y posterior a la solicitud.

#Comprender los middlewares en Laravel
El middleware actúa como un mecanismo para filtrar las solicitudes HTTP que ingresan a su aplicación. Piense en ello como una serie de capas por las que debe pasar la solicitud antes de llegar al núcleo de su aplicación.
#Tipos de middleware
Laravel te permite crear dos tipos de middleware:
- Before Middleware: ejecuta tareas antes de que la aplicación procese la solicitud.
- After Middleware posterior: realiza operaciones después de que la aplicación haya procesado la solicitud.
Veamos ejemplos de ambos tipos:
#Before Middleware
<?php
namespace AppHttpMiddleware;
use Closure;
use IlluminateHttpRequest;
use SymfonyComponentHttpFoundationResponse;
class BeforeMiddleware
{
public function handle(Request $request, Closure $next): Response
{
// Perform action before the request is handled
$request->headers->set('X-Track-Id', uniqid());
return $next($request);
}
}
En este ejemplo, el middleware agrega un ID de seguimiento a los encabezados de solicitud antes de pasarlo más abajo en la pila de aplicaciones.
#After Middleware
<?php
namespace AppHttpMiddleware;
use Closure;
use IlluminateHttpRequest;
use SymfonyComponentHttpFoundationResponse;
class AfterMiddleware
{
public function handle(Request $request, Closure $next): Response
{
$response = $next($request);
// Perform action after the request is handled
$response->headers->set('X-Track-Id', $request->header('X-Track-Id'));
return $response;
}
}
Este middleware captura la respuesta, agrega el ID de seguimiento de la solicitud a los encabezados de respuesta y luego devuelve la respuesta.
#Ejemplo práctico
Consideremos un escenario en el que queremos realizar un seguimiento del tiempo de procesamiento de cada solicitud en nuestra aplicación. Podemos utilizar una combinación de middleware Before y After para lograrlo.
Primero, creemos un middleware TrackRequestTime:
<?php
namespace AppHttpMiddleware;
use Closure;
use IlluminateHttpRequest;
use SymfonyComponentHttpFoundationResponse;
class TrackRequestTime
{
public function handle(Request $request, Closure $next): Response
{
$request->attributes->set('start_time', microtime(true));
$response = $next($request);
$duration = microtime(true) - $request->attributes->get('start_time');
$response->headers->set('X-Request-Duration', round($duration * 1000, 2) . 'ms');
return $response;
}
}
Ahora, apliquemos este middleware a una ruta:
Route::get('/api/users', function () {
// Simulate some processing time
sleep(1);
return User::all();
})->middleware(TrackRequestTime::class);
Cuando realizamos una solicitud a esta ruta, el middleware:
- Establece una hora de inicio antes de que se procese la solicitud
- Permite que la aplicación procese la solicitud
- Calcula la duración después de que se genera la respuesta
- Agrega la duración a los encabezados de respuesta
El resultado se verá así:
// Response headers
{
"X-Request-Duration": "1002.45ms"
}
// Response body
[
{
"id": 1,
"name": "John Doe",
"email": "john@example.com"
},
{
"id": 2,
"name": "Jane Doe",
"email": "jane@example.com"
}
]
Inicia la conversación
Hazte miembro de Antonio Jenaro para comenzar a comentar.
Regístrate ahora¿Ya estás registrado? Inicia sesión