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