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.

Dominando los middlewares de Laravel: procesamiento previo y posterior a las solicitudes

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

Web Developer

Archivado en:

Inicia la conversación

Hazte miembro de Antonio Jenaro para comenzar a comentar.

Regístrate ahora

¿Ya estás registrado? Inicia sesión