Nell’utilizzo di Laravel, potrai sicuramente usufruire della possibilità di creare un sistema di API raggiungibile da remoto ed accessibile ad applicazioni o siti di terze parti. Ultimamente lo sviluppo Headless con i nuovi framework Javascript (NextJS, React, Vue ecc.) rende spesso utile questa funzionalità.
Laravel e il limite di richieste API
Nativamente Laravel limita a 30 richieste per minuto l’accesso alle API. Quindi qualsiasi route al quale vorrai effettuare una richiesta avrà questa limitazione, che viene riportata a zero (o resettata) allo scadere dei 60 secondi dalla prima richiesta.
Qualora fosse necessario aumentare le richieste è possibile farlo? Nello specifico caso, si è possibile (scopri come senza leggere altro).
Ovviamente è una pratica che grava molto sulle risorse del server su cui gira l’applicazione Laravel, ecco perchè prima di utilizzare questa pratica conviene parlare di tutte le soluzioni che mette a disposizione Laravel per ovviare a questa problematica.
Laravel e la cache applicata alle API
Una delle prime cose da implementare, sia se parliamo di un numero di richieste alte verso le API, sia che parliamo anche soltanto di un’applicazione frontend con Laravel, il consiglio è quello di utilizzare il cacheing. Abilitare la cache permette di immagazzinare dati, che vengono utilizzati ricorsivamente, con conseguentemente un forte sgravio da parte delle risorse server, che non dovendo interagire con il database permettono, oltre che un tuning delle prestazioni anche lo “scarico” del server in termini di risorse.
C’è una bella sezione sulla documentazione di Laravel relativa alla cache: cache in Laravel.
Laravel: disabilitare il limite delle API per determinati IP
Se non è possibile l’utilizzo della cache, un’altra opzione è quella di creare un Middleware, da applicare alle routes interessate. Nel Middleware potremo filtrare la richiesta in base all’IP o all’indirizzo remoto del richiedente. Quindi, banalmente con un costrutto IF sarà possibile verificare il richiedente e quindi agire sul RateLimite di Laravel.
Se anche quest’opzione non fa per voi, o la implementerete in un secondo momento potete modificare il Rate Limit direttamente dal Kernel di Laravel.
Modificare il limite di richieste alle API di Laravel dal Kernel
Come detto, il consiglio è quello di applicare quest’opzione soltanto in fase di test o in casi estremi, tenendo sempre in considerazione che il server può essere sottoposto ad uno stress maggiore del normale.
Come fare? Andando ad agire nel Kernel.php accessibile dalla root di Laravel nella cartella app/Http.
Nel gruppo “api” infatti è sufficiente cambiare il throttle da:
'throttle:api',
a
'throttle:100,1',
Dove 100 sta per le richieste e 1 è riferito alla tempistica (1 minuto). In questo caso quindi si accetteranno 100 richieste al minuto.
Potete ovviamente personalizzare il comando con ‘1000,1’ dove le richieste saranno 1000 oppure con ‘1000,2’ dove le richieste saranno sempre 1000 ma nel tempo limite di due minuti.