Saltar al contenido principal

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.

Rutas del Foro

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 que null.

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
];