Aceleración de la API
Flarum viene con un Flarum\Api\Middleware\ThrottleApi
middleware para acelerar las peticiones a la API. Esto se ejecuta en cada ruta de la API, y las extensiones pueden añadir su propia lógica personalizada para acelerar las solicitudes.
Algunas rutas del foro (inicio de sesión, registro, olvido de contraseña, etc) funcionan llamando a una ruta de la API bajo la superficie. El middleware ThrottleApi
no se ejecuta actualmente para estas peticiones, pero está previsto para el futuro.
Aceleradores personalizados
El formato de un acelerador personalizado es extremadamente simple: todo lo que necesitas es un cierre o clase invocable que tome la petición actual como argumento, y devuelva una de las siguientes opciones
false
: Esto evita explícitamente el aceleramiento para esta solicitud, anulando todos los demás aceleradores.true
: Esto marca la solicitud como para ser acelerada.null
: Esto significa que este acelerador no se aplica. Cualquier otra salida será ignorada, con el mismo efecto quenull
.
Los aceleradores se ejecutarán en TODAS las peticiones, y son responsables de averiguar si se aplican o no. Por ejemplo, considere el acelerador de correos de Flarum:
use DateTime;
use Flarum\Post\Post;
function ($request) {
if (! use DateTime;
use Flarum\Post\Post;
function ($request) {
if (! in_array($request->getAttribute('routeName'), ['discussions.create', 'posts.create'])) {
return;
}
$actor = $request->getAttribute('actor');
if ($actor->can('postWithoutThrottle')) {
return false;
}
if (Post::where('user_id', $actor->id)->where('created_at', '>=', new DateTime('-10 seconds'))->exists()) {
return true;
}
};
Los aceleradores pueden ser añadidos o eliminados a través del middleware ThrottleApi
en extend.php
. Por ejemplo:
<?php
use Flarum\Extend;
return [
// Other extenders
(new Extend\ThrottleApi())
->set('throttleAll', function () {
return false;
})
->remove('bypassThrottlingAttribute'),
// Other extenders
];