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.

#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!
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