Cómo dominar la limitación de velocidad en Laravel: una navegación tranquila para su API y colas

  • Publicado el 11 octubre, 2024
  • Palabras: 417

¿Alguna vez te preocupa que tu API se vea afectada o que tus trabajos en cola saturen a los servicios externos? ¡Las funciones de limitación de velocidad de Laravel te ayudan con eso! Veamos cómo puedes usar RateLimiter para mantener todo bajo control.

Cómo dominar la limitación de velocidad en Laravel: una navegación tranquila para su API y colas

#El Facade RateLimiter

 

El facade de Laravel RateLimiter es tu herramienta ideal para configurar límites de velocidad y además es fácil de usar.

 

Establecer un límite de velocidad

 

A continuación puedes ver cómo establecer un límite de velocidad:

 

use Illuminate\Support\Facades\RateLimiter;

RateLimiter::for(
    GlobalRateLimit::HUBSPOT,
    fn () => Limit::perSecond(100, 10)
);

 

¿Qué está pasando aquí?

 

  • Estamos definiendo un límite de velocidad llamado GlobalRateLimit::HUBSPOT
  • Estamos permitiendo 100 intentos por segundo
  • Si se excede el límite, agregaremos un retraso de 10 segundos

 

#Trabajos en cola con limitación de velocidad

 

Pero espera, ¡hay más! También puedes aplicar límites de velocidad a tus trabajos en cola:

 

use Illuminate\Queue\Middleware\RateLimited;

public function middleware(): array
{
    return [
        new RateLimited(GlobalRateLimit::HUBSPOT)
    ];
}

 

Este código aplica el límite de velocidad de HUBSPOT a un trabajo en cola. Es perfecto para cuando se accede a API externas y se necesita respetar sus límites de uso.

 

#Ejemplo práctico: Integración de API

 

Supongamos que se está integrando con la API de HubSpot. Quiere asegurarse de no exceder sus límites de velocidad:

 

use Illuminate\Support\Facades\RateLimiter;
use App\Jobs\Sync\HubSpotContacts;

class HubSpotController extends Controller
{
    public function __construct()
    {
        RateLimiter::for('hubspot-api', function () {
            return Limit::perMinute(100)->by(auth()->id());
        });
    }

    public function syncContacts()
    {
        SyncHubSpotContacts::dispatch()->middleware(['throttle:hubspot-api']);
        
        return response()->json(['message' => 'Contact sync job queued']);
    }
}

class SyncHubSpotContacts implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public function middleware(): array
    {
        return [new RateLimited('hubspot-api')];
    }

    public function handle()
    {
        // Sync logic here
    }
}

 

En este ejemplo:

 

  • Configuramos un límite de velocidad para las llamadas a la API de HubSpot
  • Aplicamos este límite tanto a nuestro controlador como a nuestro trabajo en cola
  • Esto garantiza que nos mantengamos dentro de los límites de velocidad de HubSpot, ya sea que estemos haciendo llamadas a la API directas o procesando trabajos en la cola


Al usar las funciones de limitación de velocidad de Laravel, puede mantener su aplicación funcionando sin problemas, respetar los límites de la API y evitar que un solo usuario o proceso sobrecargue su sistema. ¡Es imprescindible para cualquier aplicación Laravel robusta!

Antonio Jenaro
Antonio Jenaro

Web Developer

Archivado en:

Fuente: Harris Raftopoulos

Inicia la conversación

Hazte miembro de Antonio Jenaro para comenzar a comentar.

Regístrate ahora

¿Ya estás registrado? Inicia sesión