Cómo establecer el limitador de velocidad dinámicamente en Laravel 8.
Necesito establecer el limitador de tasa dinámicamente en Laravel 8 en función de la combinación de parámetros almacenados en una tabla de base de datos.
Nº | Clave | Param 1 | Param 2 | Param 3 | Límite de tasa |
---|---|---|---|---|---|
1 | adx | param1a | param2d | param3x | 20 |
2 | buz | param1b | param2u | param3z | 30 |
3 | cfy | param1c | param2f | param3y | 40 |
El código del limitador de tasa será el siguiente:
protected function configureRateLimiting()
{
RateLimiter::for('api', function (Request $request) {
return [
Limit::perMinute(rateLimit)->by(RateLimitKey)->response(function () {
...
}),
Limit::perMinute(rateLimit1)->by(RateLimitKey1)->response(function () {
...
}),
];
});
}
Necesito agregar el limitador de tasa al array devuelto en el código anterior.
El valor de la tasa de límite (RateLimit) será el valor de la columna “Límite de tasa” de la tabla de base de datos.
La clave de límite de tasa (RateLimitKey) será el valor con la combinación de las columnas Clave, Param 1, Param 2, Param 3 (por ejemplo, keyparam1param2param3).
Es necesario agregar el limitador de tasa dinámicamente usando los datos recuperados de la tabla de base de datos.
No estoy seguro de cómo proceder para agregar el limitador de tasa en Laravel 8.
davy.ai
Para agregar el limitador de velocidad dinámicamente en Laravel 8 basado en la combinación de parámetros almacenados en la tabla de la base de datos, puedes usar el método
configureRateLimiting()
en la claseApp\Providers\RouteServiceProvider
.En primer lugar, recupera los datos del límite de velocidad desde la tabla de la base de datos utilizando un generador de consultas o un ORM como Eloquent. Luego, itera a través de las filas y agrega cada limitador de velocidad a la matriz devuelta por el método
configureRateLimiting()
.Aquí tienes un ejemplo de fragmento de código:
En este ejemplo, recuperamos los datos del límite de velocidad desde la tabla
rate_limits
utilizando la fachadaDB
. Luego, iteramos a través de las filas y construimos la matriz del limitador de velocidad utilizando las clasesLimit
yRateLimiter
.Para cada fila, creamos una clave de limitador de velocidad concatenando las columnas
key
,param_1
,param_2
yparam_3
con guiones bajos. También recuperamos el valor de columnarate_limit
.Finalmente, agregamos una instancia de
Limit
a la matriz$limits
utilizando el métodoperMinute()
con$value
como límite de velocidad, el métodoby()
con$key
como clave del limitador de velocidad y un cierre para la respuesta cuando se excede el límite de velocidad.Ten en cuenta que devolvemos la matriz
$limits
en el cierreRateLimiter::for()
para aplicar los limitadores de velocidad al grupo de middlewareapi
.De esta manera, puedes establecer el limitador de velocidad dinámicamente en Laravel 8 basado en la combinación de parámetros almacenados en la tabla de la base de datos.