{"id":72475,"date":"2023-08-21T14:28:38","date_gmt":"2023-08-21T13:28:38","guid":{"rendered":"https:\/\/kinsta.com\/it\/?p=72475&#038;preview=true&#038;preview_id=72475"},"modified":"2023-09-01T15:37:22","modified_gmt":"2023-09-01T14:37:22","slug":"laravel-throttle","status":"publish","type":"post","link":"https:\/\/kinsta.com\/it\/blog\/laravel-throttle\/","title":{"rendered":"Come aggiungere il rate limiting a un&#8217;API in un&#8217;applicazione Laravel"},"content":{"rendered":"<p>Il rate limiting \u00e8 fondamentale per proteggere le risorse di un&#8217;applicazione o di un sito web da un uso eccessivo o improprio. Che sia il risultato di un intervento umano malevolo, di attacchi basati su bot o di una vulnerabilit\u00e0 trascurata, l&#8217;uso improprio delle risorse pu\u00f2 interferire con l&#8217;accesso legittimo alla vostra applicazione e introdurre gravi vulnerabilit\u00e0.<\/p>\n<p>Questo articolo spiega come aggiungere il rate limiting a un&#8217;API in un&#8217;applicazione Laravel. <div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc><\/p>\n<h2>Limitare il traffico delle API in Laravel<\/h2>\n<p>Il rate limiting \u00e8 un meccanismo progettato per mitigare lo sfruttamento delle risorse di un&#8217;applicazione. Sebbene abbia molti usi, \u00e8 particolarmente utile per le API pubbliche in sistemi scalabili di grandi dimensioni. Garantisce a tutti gli utenti legittimi un accesso equo alle risorse del sistema.<\/p>\n<p>Il rate limiting \u00e8 fondamentale anche per la sicurezza, il controllo dei costi e la stabilit\u00e0 generale del sistema. Pu\u00f2 aiutare a prevenire gli attacchi basati sulle richieste, come gli attacchi DDoS (distributed denial-of-service). Questo attacco si basa sull&#8217;invio di richieste ripetute per sovraccaricare e interrompere l&#8217;accesso al server di un&#8217;applicazione o di un sito web.<\/p>\n<p>Esistono diversi metodi per implementare il rate limiting. Si possono utilizzare delle variabili che caratterizzano il richiedente per determinare chi pu\u00f2 accedere a un&#8217;applicazione e con quale frequenza. Alcune variabili comuni sono:<\/p>\n<ul>\n<li><strong>Indirizzo IP<\/strong> &#8211; L&#8217;implementazione di rate limiting basati sugli indirizzi IP permette di limitare il numero di richieste per indirizzo. Questo metodo \u00e8 particolarmente vantaggioso nei casi in cui gli utenti possono accedere all&#8217;applicazione senza fornire le credenziali.<\/li>\n<li><strong>Chiave API<\/strong> &#8211; Limitare l&#8217;accesso tramite chiavi API significa fornire al richiedente delle chiavi API pre-generate e stabilire dei rate limiting per ogni chiave. Con questo approccio, si possono anche applicare diversi livelli di accesso alle chiavi API generate.<\/li>\n<li><strong>ID cliente<\/strong> &#8211; Si pu\u00f2 anche pre-generare un ID cliente che l&#8217;utente pu\u00f2 inserire nell&#8217;intestazione o nel corpo delle richieste API. Questo metodo permette di impostare livelli di accesso per ID per garantire che nessun client possa monopolizzare le risorse del sistema.<\/li>\n<\/ul>\n<h3>Middleware di Laravel<\/h3>\n<p>Il middleware fornisce un comodo meccanismo per ispezionare e filtrare le <a href=\"https:\/\/kinsta.com\/it\/blog\/richieste-http-javascript\/\">richieste HTTP<\/a> che entrano in un&#8217;applicazione. In sostanza, si tratta di uno strato di codice tra l&#8217;applicazione e l&#8217;infrastruttura sottostante per consentire la comunicazione tra le risorse.<\/p>\n<h2>Come implementare i rate limiting<\/h2>\n<p>Questo tutorial utilizza una mini libreria API esistente sul framework Laravel 10 per dimostrare l&#8217;uso di Laravel Throttle. Il progetto di partenza contiene le implementazioni di base per la creazione, la lettura, l&#8217;aggiornamento e la cancellazione (CRUD) necessarie per gestire i libri in una raccolta e due percorsi extra per dimostrare alcuni concetti di rate limiting.<\/p>\n<h3>Prerequisiti<\/h3>\n<p>Il tutorial presuppone che si conoscano le basi dello sviluppo di API in Laravel. Assicuratevi di avere i seguenti elementi:<\/p>\n<ul>\n<li>PHP 8.2, <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Composer<\/a> e <a href=\"https:\/\/laravel.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Laravel<\/a> installati e configurati sul computer locale<\/li>\n<li>Un account <a href=\"https:\/\/kinsta.com\/it\/registrazione\/\">Kinsta<\/a> attivo<\/li>\n<li>Un account su <a href=\"https:\/\/github.com\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub<\/a>, <a href=\"https:\/\/gitlab.com\" target=\"_blank\" rel=\"noopener noreferrer\">GitLab<\/a> o <a href=\"https:\/\/bitbucket.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Bitbucket<\/a> per eseguire il push del tuo codice<\/li>\n<\/ul>\n<p>Utilizzeremo anche <a href=\"https:\/\/my.kinsta.com?lang=it\">MyKinsta<\/a> per configurare e distribuire questa API. Potete anche seguire il <a href=\"https:\/\/github.com\/VirtuaCreative\/kinsta-library-api-template\" target=\"_blank\" rel=\"noopener noreferrer\">template di progetto<\/a> fornito e vedere l&#8217;anteprima del risultato finale dal <a href=\"https:\/\/github.com\/VirtuaCreative\/kinsta-library-api\" target=\"_blank\" rel=\"noopener noreferrer\">codice sorgente completo<\/a>.<\/p>\n<h2>Configurazione dell&#8217;applicazione Laravel<\/h2>\n<ol start=\"1\">\n<li>Per iniziare, cloniamo il <a href=\"https:\/\/github.com\/VirtuaCreative\/kinsta-library-api-template\" target=\"_blank\" rel=\"noopener noreferrer\">template di progetto<\/a>.<\/li>\n<li>Quindi, creiamo un file <strong>.env<\/strong> nella directory principale del progetto e copiamo il contenuto di <strong>.env.example<\/strong> al suo interno.<\/li>\n<li>Successivamente, completiamo la configurazione utilizzando i seguenti comandi per installare le dipendenze dell&#8217;applicazione e generare la chiave dell&#8217;applicazione.<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">composer install\nphp artisan key:generate<\/code><\/pre>\n<p>Se questo comando non aggiunge automaticamente la chiave dell&#8217;applicazione al file <strong>.env<\/strong>, eseguite <code>php artisan key:generate --show<\/code>, copiate la chiave generata e incollatela nel file <strong>.env<\/strong> come valore per <code>APP_KEY<\/code>.<\/p>\n<ol start=\"4\">\n<li>Una volta completata l&#8217;installazione delle dipendenze e la generazione della chiave dell&#8217;applicazione, avviamo l&#8217;applicazione con il seguente comando:<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">php artisan serve<\/code><\/pre>\n<p>Questo comando avvia l&#8217;applicazione e la rende accessibile tramite il browser all&#8217;indirizzo <code>https:\/\/127.0.0.1:8000<\/code>.<\/p>\n<ol start=\"5\">\n<li>Visitiamo l&#8217;URL per verificare che la pagina di benvenuto di Laravel venga visualizzata:<\/li>\n<\/ol>\n<figure>\n<p><figure style=\"width: 1279px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/laravel-throttle-welcome-page.png\" alt=\"La pagina di benvenuto di Laravel mostra il suo logo in alto al centro. \" width=\"1279\" height=\"801\"><figcaption class=\"wp-caption-text\">La schermata di benvenuto di Laravel<\/figcaption><\/figure><\/figure>\n<h2>Configurazioni del database<\/h2>\n<p>Configuriamo e impostiamo il database dell&#8217;applicazione in <a href=\"https:\/\/my.kinsta.com\/login?lang=it\">MyKinsta<\/a>.<\/p>\n<ol start=\"1\">\n<li>Accediamo alla dashboard dell&#8217;account MyKinsta e clicchiamo sul pulsante <strong>Aggiungi servizio<\/strong>:<\/li>\n<\/ol>\n<figure>\n<p><figure style=\"width: 1582px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/laravel-throttle-mykinsta-services.png\" alt=\"Il segmento superiore della scheda Cruscotto di MyKinsta \u00e8 caratterizzato da una barra degli strumenti superiore. \" width=\"1582\" height=\"476\"><figcaption class=\"wp-caption-text\">La dashboard di MyKinsta con diversi servizi configurati.<\/figcaption><\/figure><\/figure>\n<ol start=\"2\">\n<li>Nell&#8217;elenco <strong>Aggiungi servizio<\/strong>, clicchiamo su <strong>Database<\/strong> e configuriamo i parametri per avviare l&#8217;istanza del database:<\/li>\n<\/ol>\n<figure>\n<p><figure style=\"width: 786px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/laravel-throttle-mykinsta-database.png\" alt=\"Il modulo \"Crea un database\" di Kinsta visualizza la prima sezione, chiamata \"Dettagli di base.\"\" width=\"786\" height=\"1266\"><figcaption class=\"wp-caption-text\">Configurazione del database MyKinsta.<\/figcaption><\/figure><\/figure>\n<p>Questo tutorial utilizza MariaDB, ma si pu\u00f2 scegliere una qualsiasi delle opzioni di database supportate da Laravel che Kinsta mette a disposizione.<\/p>\n<ol start=\"3\">\n<li>Una volta inseriti i dati del database, clicchiamo sul pulsante <strong>Continua<\/strong> per completare la procedura.<\/li>\n<\/ol>\n<p>I database forniti da Kinsta hanno parametri di connessione interni ed esterni. Bisogna utilizzare i parametri di connessione interni per le applicazioni ospitate all&#8217;interno dello stesso account Kinsta e i parametri esterni per le connessioni esterne. Pertanto, utilizziamo le credenziali del database esterno di Kinsta per la nostra applicazione.<\/p>\n<ol start=\"4\">\n<li>Copiamo e aggiorniamo le credenziali <strong>.env<\/strong> del database dell&#8217;applicazione con le credenziali esterne mostrate nella schermata seguente:<\/li>\n<\/ol>\n<figure>\n<p><figure style=\"width: 1590px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/laravel-throttle-mykinsta-database-settings.png\" alt=\"La dashboard di Kinsta visualizza la sezione \"Dettagli di base\" del database \"library-records\" appena creato. Tutte le informazioni corrispondono a quelle inserite nella precedente immagine di configurazione del database.\" width=\"1590\" height=\"1133\"><figcaption class=\"wp-caption-text\">Dettagli della configurazione del database di MyKinsta.<\/figcaption><\/figure><\/figure>\n<pre><code class=\"language-env\">DB_CONNECTION=mysql\nDB_HOST=your_host_name\nDB_PORT=your_port\nDB_DATABASE=your_database_info\nDB_USERNAME=your_username\nDB_PASSWORD=your_password<\/code><\/pre>\n<ol start=\"5\">\n<li>Dopo aver inserito le credenziali del database, verifichiamo la connessione applicando la migrazione del database con il comando seguente:<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">php artisan migrate<\/code><\/pre>\n<p>Se tutto funziona correttamente, dovreste vedere una risposta simile a quella mostrata qui sotto.<\/p>\n<figure>\n<p><figure style=\"width: 1999px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/laravel-throttle-terminal-database-migration.png\" alt=\"L'output del terminale mostra il comando Bash \"php artisan migrate\" e il suo output. Immediatamente sotto il comando, un'etichetta \"INFO\" afferma \"Esecuzione delle migrazioni.\"Sotto di essa ci sono le quattro migrazioni e i loro stati, elencati come segue:2014_10_12_0000_create_users_table...812ms DONE.2014 _10_12_100000_create_password_reset_tokens_table...882ms DONE.2019_08_19_000000_create_failed_jobs_table...942ms DONE.2019_12_14_000001_create_personal_access_tokens_table...1,250ms DONE. Di seguito, il cursore si posiziona su una riga di comando vuota per consentire ulteriori input.\" width=\"1999\" height=\"450\"><figcaption class=\"wp-caption-text\">Migrazione del database riuscita su un terminale.<\/figcaption><\/figure><\/figure>\n<ol start=\"6\">\n<li>Successivamente, usiamo il seguente comando per elencare i percorsi dell&#8217;applicazione e vedere i percorsi gi\u00e0 implementati.<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">php artisan route:list<\/code><\/pre>\n<p>A questo punto, dovremmo vedere gli endpoint API disponibili:<\/p>\n<figure>\n<p><figure style=\"width: 1999px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/laravel-throttle-terminal-api-endpoints.png\" alt=\"Il terminale visualizza il messaggio \"php artisan route:\" width=\"1999\" height=\"411\"><figcaption class=\"wp-caption-text\">Elenco dei percorsi dell&#8217;applicazione sul terminale.<\/figcaption><\/figure><\/figure>\n<ol start=\"7\">\n<li>Avviamo l&#8217;applicazione e verifichiamo che tutto funzioni correttamente. Possiamo testare questi endpoint tramite il terminale utilizzando uno strumento come <a href=\"https:\/\/www.postman.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Postman<\/a> o CURL.<\/li>\n<\/ol>\n<h2>Come impostare il rate limiting in un&#8217;applicazione Laravel<\/h2>\n<p>Per le applicazioni Laravel sono disponibili diverse tecniche di rate limiting. \u00c8 possibile bloccare un insieme di <a href=\"https:\/\/kinsta.com\/it\/blog\/ip-statici-o-dinamici\/\">indirizzi IP<\/a> o imporre limiti di richiesta basati sulla durata in base all&#8217;indirizzo IP o all&#8217;ID utente di un utente. Di seguito, applichiamo ciascuno di questi metodi.<\/p>\n<ol start=\"1\">\n<li>Installiamo il pacchetto Laravel Throttle con il seguente comando:<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">composer require \"graham-campbell\/throttle:^10.0\"<\/code><\/pre>\n<ol start=\"2\">\n<li>Possiamo anche apportare ulteriori modifiche alle configurazioni di Laravel Throttle pubblicando il file <code>vendor configurations<\/code>:<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">php artisan vendor:publish --provider=\"GrahamCampbellThrottleThrottleServiceProvider\"<\/code><\/pre>\n<h3>Come bloccare gli indirizzi IP<\/h3>\n<p>Una delle tecniche di rate limiting permette di bloccare le richieste provenienti da un insieme specifico di indirizzi IP.<\/p>\n<ol start=\"1\">\n<li>Per iniziare, creiamo il middleware necessario:<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">php artisan make:middleware RestrictMiddleware<\/code><\/pre>\n<ol start=\"2\">\n<li>Apriamo quindi il file middleware creato <strong>app\/Http\/Middleware\/RestrictMiddleware.php<\/strong> e sostituiamo il codice della funzione <code>handle<\/code> con il frammento seguente. Assicuriamoci di aggiungere <code>use App;<\/code> all&#8217;elenco delle importazioni all&#8217;inizio del file.<\/li>\n<\/ol>\n<pre><code class=\"language-php\">$restrictedIps = ['127.0.0.1', '102.129.158.0'];\nif(in_array($request-&gt;ip(), $restrictedIps)){\n  App::abort(403, 'Request forbidden');\n}\nreturn $next($request);<\/code><\/pre>\n<ol start=\"3\">\n<li>Nel file <strong>app\/Http\/Kernel.php<\/strong>, creiamo un alias per questa applicazione middleware aggiornando l&#8217;array <code>middlewareAliases<\/code> come segue:\n<pre><code class=\"language-php\">protected $middlewareAliases = [\n. . .\n'custom.restrict' =&gt; AppHttpMiddlewareRestrictMiddleware::class,\n];<\/code><\/pre>\n<ol start=\"4\">\n<li>Quindi, applichiamo questo middleware a <code>\/restricted-route<\/code> nel file <strong>routes\/api.php<\/strong> come segue e facciamo un test:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">Route::middleware(['custom.restrict'])-&gt;group(function () {\n  Route::get('\/restricted-route', [BookController::class, 'getBooks']);\n});<\/code><\/pre>\n<p>Se funziona correttamente, questo middleware blocca tutte le richieste provenienti dagli IP dell&#8217;array <code> $restrictedIps<\/code>: <code>127.0.0.1<\/code> e <code>102.129.158.0<\/code>. Le richieste provenienti da questi IP restituiscono una risposta <strong>403 Forbidden<\/strong>, come mostrato di seguito:<\/p>\n<figure>\n<p><figure style=\"width: 1136px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/laravel-throttle-postman-returns-403.png\" alt=\"L'applicazione Postman restituisce una risposta \"403 Request Forbidden\" a una richiesta GET all'URL\" width=\"1136\" height=\"807\"><figcaption class=\"wp-caption-text\">Una risposta 403 Forbidden per l&#8217;endpoint \/restricted-route GET su Postman<\/figcaption><\/figure><\/figure>\n<h3>Come limitare le richieste in base all&#8217;indirizzo IP<\/h3>\n<p>Successivamente, possiamo limitare le richieste in base all&#8217;indirizzo IP dell&#8217;utente.<\/p>\n<ol start=\"1\">\n<li>Applichiamo il middleware Throttle alle route <code>GET<\/code> e <code>PATCH<\/code> dell&#8217;endpoint <code>\/book<\/code> in <strong>routes\/api.php<\/strong>:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">Route::middleware(['throttle:minute'])-&gt;group(function () {\n  Route::get('\/book', [BookController::class, 'getBooks']);\n});\n\nRoute::middleware(['throttle:5,1'])-&gt;group(function () {\n  Route::patch('\/book', [BookController::class, 'updateBook']);\n});<\/code><\/pre>\n<ol start=\"2\">\n<li>Dovremo anche aggiornare la funzione <code>configureRateLimiting<\/code> nel file <strong>app\/Providers\/RouteServiceProvider<\/strong> con il middleware che abbiamo aggiunto alle route precedenti.<\/li>\n<\/ol>\n<pre><code class=\"language-php\">\u2026 \nRateLimiter::for('minute', function (Request $request) {\n  return Limit::perMinute(5)-&gt;by($request-&gt;ip());\n});<\/code><\/pre>\n<p>Questa configurazione limita le richieste all&#8217;endpoint <code>\/book GET<\/code> a 5 al minuto, come mostrato di seguito.<\/p>\n<figure>\n<p><figure style=\"width: 1142px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/laravel-throttle-postman-returns-429.png\" alt=\"L'applicazione Postman restituisce una risposta \"429 Too Many Requests\" a una richiesta GET all'URL \" width=\"1142\" height=\"805\"><figcaption class=\"wp-caption-text\">Una risposta &#8220;429 Too Many Requests&#8221; per l&#8217;endpoint \/book GET su Postman.<\/figcaption><\/figure><\/figure>\n<h3>Come limitare le richieste in base all&#8217;ID utente e alle sessioni<\/h3>\n<ol start=\"1\">\n<li>Per limitare la velocit\u00e0 utilizzando i parametri <code>user_id<\/code> e <code>session<\/code>, aggiorniamo la funzione <code>configureRateLimiting<\/code> nel file <strong>app\/Providers\/RouteServiceProvider<\/strong> con i seguenti limitatori e variabili aggiuntive:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">...\nRateLimiter::for('user', function (Request $request) {\n  return Limit::perMinute(10)-&gt;by($request-&gt;user()?-&gt;id ?: $request-&gt;ip());\n});\nRateLimiter::for('session', function (Request $request) {\n  return Limit::perMinute(15)-&gt;by($request-&gt;session()-&gt;get('key') ?: $request-&gt;ip());\n});<\/code><\/pre>\n<ol start=\"2\">\n<li>Infine, applichiamo questo codice alle route <code>\/book\/{id} GET<\/code> e <code>\/book POST<\/code> nel file <code>routes\/api.php<\/code>:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">Route::middleware(['throttle:user'])-&gt;group(function () {\n  Route::get('\/book\/{id}', [BookController::class, 'getBook']);\n});\nRoute::middleware(['throttle:session'])-&gt;group(function () {\n  Route::post('\/book', [BookController::class, 'createBook']);\n});<\/code><\/pre>\n<p>Questo codice limita le richieste che utilizzano rispettivamente <code>user_id<\/code> e <code>session<\/code>.<\/p>\n<h3>Metodi aggiuntivi in Throttle<\/h3>\n<p>Laravel Throttle offre diversi <a href=\"https:\/\/github.com\/GrahamCampbell\/Laravel-Throttle#usage\" target=\"_blank\" rel=\"noopener noreferrer\">metodi aggiuntivi<\/a> per un maggiore controllo sull&#8217;implementazione del rate limiting. Questi metodi includono:<\/p>\n<ul>\n<li><code>attempt<\/code> &#8211; Colpisce l&#8217;endpoint, incrementa il conteggio degli hit e restituisce un booleano che indica se il limite di hit configurato \u00e8 stato superato.<\/li>\n<li><code>hit<\/code> &#8211; Colpisce il Throttle, incrementa il conteggio degli hit e restituisce <code>$this<\/code> per abilitare un&#8217;altra chiamata al metodo (opzionale).<\/li>\n<li><code>clear<\/code> &#8211; Azzera il conteggio del Throttle e restituisce <code>$this<\/code> in modo da poter effettuare un&#8217;altra chiamata al metodo, se lo desideri.<\/li>\n<li><code>count<\/code> &#8211; Restituisce il numero totale di accessi al Throttle.<\/li>\n<li><code>check<\/code> &#8211; Restituisce un booleano che indica se il limite di hit del Throttle \u00e8 stato superato.<\/li>\n<\/ul>\n<ol start=\"1\">\n<li>Per esplorare il rate limiting con questi metodi, creiamo un&#8217;applicazione middleware chiamata CustomMiddleware utilizzando il comando seguente:<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">php artisan make:middleware CustomMiddleware<\/code><\/pre>\n<ol start=\"2\">\n<li>Quindi, aggiungiamo i seguenti file di importazione al file middleware appena creato in <strong>app\/Http\/Middleware\/CustomMiddleware.php<\/strong>:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">use GrahamCampbellThrottleFacadesThrottle;\nuse App;<\/code><\/pre>\n<ol start=\"3\">\n<li>Quindi, sostituiamo il contenuto del metodo <code>handle<\/code> con il seguente frammento di codice:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">$throttler = Throttle::get($request, 5, 1);\nThrottle::attempt($request);\nif(!$throttler-&gt;check()){\n  App::abort(429, 'Too many requests');\n}\nreturn $next($request);<\/code><\/pre>\n<ol start=\"4\">\n<li>Nel file <strong>app\/Http\/Kernel.php<\/strong>, creiamo un alias per questa applicazione middleware aggiornando l&#8217;array <code>middlewareAliases<\/code> come segue.<\/li>\n<\/ol>\n<pre><code class=\"language-php\">protected $middlewareAliases = [\n. . .\n'custom.throttle' =&gt; AppHttpMiddlewareCustomMiddleware::class, \n];<\/code><\/pre>\n<ol start=\"5\">\n<li>Quindi, applichiamo questo middleware a <code>\/custom-route<\/code> nel file <strong>routes\/api.php<\/strong>:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">Route::middleware(['custom.throttle'])-&gt;group(function () {\n  Route::get('\/custom-route', [BookController::class, 'getBooks']);\n});<\/code><\/pre>\n<p>Il middleware personalizzato appena implementato controlla se il limite di strozzatura \u00e8 stato superato utilizzando il metodo <code>check<\/code>. Se il limite viene superato, risponde con un errore 429. Altrimenti, permette alla richiesta di continuare.<\/p>\n<h2>Come distribuire l&#8217;applicazione sul server Kinsta<\/h2>\n<p>Ora che abbiamo esplorato come implementare il rate limiting in un&#8217;applicazione Laravel, distribuiamo l&#8217;applicazione sul server Kinsta per renderla accessibile a livello globale.<\/p>\n<ol start=\"1\">\n<li>Iniziamo inviando il codice aggiornato a <a href=\"https:\/\/kinsta.com\/it\/blog\/gitlab-vs-github\/\">GitHub, GitLab<\/a> o <a href=\"https:\/\/kinsta.com\/it\/blog\/bitbucket-e-github\/\">Bitbucket<\/a>.<\/li>\n<li>Dalla dashboard di Kinsta, clicchiamo sul pulsante <strong>Aggiungi servizio<\/strong> e selezioniamo <strong>Applicazione<\/strong> dall&#8217;elenco. Colleghiamo l&#8217;account Git all&#8217;account Kinsta e selezioniamo il repository corretto da distribuire.<\/li>\n<li>In <strong>Dettagli di base<\/strong>, diamo un nome all&#8217;applicazione e scegliamo il data center che preferiamo. Inoltre, assicuriamoci di aver aggiunto le variabili d&#8217;ambiente necessarie all&#8217;applicazione. Queste corrispondono alle variabili presenti nel file <strong>.env<\/strong> locale: le variabili di configurazione di <code>APP_KEY<\/code> e del database.<\/li>\n<\/ol>\n<figure>\n<p><figure style=\"width: 790px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/laravel-throttle-mykinsta-app-details.png\" alt=\"La sezione \"Dettagli dell'applicazione\" del modulo \"Aggiungi applicazione\" di Kinsta. \" width=\"790\" height=\"1262\"><figcaption class=\"wp-caption-text\">Dettagli sull&#8217;applicazione su MyKinsta.<\/figcaption><\/figure><\/figure>\n<ol start=\"1\">\n<li>Clicchiamo sul pulsante <strong>Continua<\/strong> per selezionare le variabili dell&#8217;ambiente di compilazione. Possiamo lasciare i valori predefiniti, poich\u00e9 Kinsta compila automaticamente i parametri necessari.<\/li>\n<li>Nella scheda <strong>Processi<\/strong>, possiamo lasciare i valori predefiniti o inserire un nome per il processo. In questa scheda possiamo anche selezionare le dimensioni dei pod e delle istanze.<\/li>\n<li>Infine, la scheda <strong>Pagamento<\/strong> mostra un riepilogo delle selezioni. Aggiungiamo l&#8217;opzione di pagamento che preferiamo per completare il processo.<\/li>\n<li>Una volta completato, clicchiamo sulla scheda <strong>Applicazioni<\/strong> per visualizzare l&#8217;elenco delle applicazioni distribuite.<\/li>\n<li>Clicchiamo sul nome dell&#8217;applicazione per visualizzarne i dettagli di distribuzione, come mostrato di seguito. Possiamo utilizzare l&#8217;URL dell&#8217;applicazione per accedervi.<\/li>\n<\/ol>\n<figure>\n<p><figure style=\"width: 1587px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/laravel-throttle-mykinsta-app-deployments.png\" alt=\"La scheda MyKinsta \"Distribuzioni\" visualizza i dettagli delle applicazioni distribuite..\" width=\"1587\" height=\"836\"><figcaption class=\"wp-caption-text\">Dettagli della distribuzione sulla dashboard di MyKinsta.<\/figcaption><\/figure><\/figure>\n<h2>Come testare l&#8217;applicazione<\/h2>\n<ol start=\"1\">\n<li>Per testare l&#8217;applicazione in locale, usiamo il comando <code>php artisan serve<\/code>.<\/li>\n<\/ol>\n<p>Questo comando rende accessibile il browser dell&#8217;applicazione all&#8217;indirizzo <code>http:\/\/localhost:8000<\/code>. Da qui possiamo testare gli endpoint dell&#8217;API a cui abbiamo implementato il rate limiting effettuando chiamate ripetute per attivare la funzionalit\u00e0 di rate limiting.<\/p>\n<p>Il server Kinsta visualizza una risposta <strong>Access Forbidden<\/strong> perch\u00e9 non abbiamo aggiunto i dettagli di configurazione che indicano a Kinsta come servire l&#8217;applicazione. Aggiungiamo ora questi dettagli.<\/p>\n<ol start=\"2\">\n<li>Creiamo un file <code>.htaccess<\/code> nella directory principale dell&#8217;applicazione e aggiungiamo il seguente codice al file:<\/li>\n<\/ol>\n<pre><code class=\"language-apacheconf\"> &lt;IfModule mod_rewrite.c&gt;\n  RewriteEngine On\n  RewriteRule ^(.*)$ public\/$1 [L]\n&lt;\/IfModule&gt;<\/code><\/pre>\n<ol start=\"3\">\n<li>Effettuiamo il push di queste modifiche su GitHub e Kinsta effettuer\u00e0 il deploy automatico per applicare la modifica.<\/li>\n<li>Ora, apriamo l&#8217;applicazione utilizzando l&#8217;URL fornito e assicuriamoci di visualizzare la pagina di benvenuto di Laravel.<\/li>\n<\/ol>\n<p>Ora possiamo testare gli endpoint dell&#8217;API su cui abbiamo implementato il rate limiting utilizzando Postman, effettuando chiamate ripetute fino a raggiungere il limite configurato. Dopo aver superato il limite, riceveremo una risposta <strong>429 Too Many Requests<\/strong>.<\/p>\n<h2>Riepilogo<\/h2>\n<p>L&#8217;integrazione di funzionalit\u00e0 di rate limiting in un&#8217;API di Laravel aiuta a controllare la velocit\u00e0 con cui gli utenti consumano le risorse di un&#8217;applicazione. Il rate limiting aiuta a fornire un&#8217;esperienza affidabile agli utenti, senza incorrere in sovra e sottoutilizzi. Inoltre, garantisce che l&#8217;infrastruttura sottostante l&#8217;applicazione rimanga funzionale ed efficiente.<\/p>\n<p>Date un&#8217;occhiata al blog di Kinsta per scoprire altri concetti interessanti su <a href=\"https:\/\/kinsta.com\/it\/argomenti\/laravel\/\">Laravel<\/a> e altre tecnologie web. I <a href=\"https:\/\/sevalla.com\/application-hosting\/\">servizi di hosting<\/a> convenienti e senza interruzioni sono altamente raccomandati per le esigenze della vostra applicazione e del vostro team.<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Il rate limiting \u00e8 fondamentale per proteggere le risorse di un&#8217;applicazione o di un sito web da un uso eccessivo o improprio. Che sia il risultato &#8230;<\/p>\n","protected":false},"author":290,"featured_media":72476,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[26232,26020],"class_list":["post-72475","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-api","topic-laravel"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Come aggiungere il rate limiting a un&#039;API in un&#039;app Laravel - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Scopri come aggiungere il rate limiting a un&#039;API in un&#039;applicazione Laravel e mitigare lo sfruttamento delle risorse dell&#039;applicazione.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/it\/blog\/laravel-throttle\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Come aggiungere il rate limiting a un&#039;API in un&#039;applicazione Laravel\" \/>\n<meta property=\"og:description\" content=\"Scopri come aggiungere il rate limiting a un&#039;API in un&#039;applicazione Laravel e mitigare lo sfruttamento delle risorse dell&#039;applicazione.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/it\/blog\/laravel-throttle\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstaitalia\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-08-21T13:28:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-09-01T14:37:22+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/laravel-throttle.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"3042\" \/>\n\t<meta property=\"og:image:height\" content=\"1521\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Marcia Ramos\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Scopri come aggiungere il rate limiting a un&#039;API in un&#039;applicazione Laravel e mitigare lo sfruttamento delle risorse dell&#039;applicazione.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/laravel-throttle.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_IT\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_IT\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Marcia Ramos\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/laravel-throttle\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/laravel-throttle\/\"},\"author\":{\"name\":\"Marcia Ramos\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/72bff0015d3fb3ba3d8a85494dc0b116\"},\"headline\":\"Come aggiungere il rate limiting a un&#8217;API in un&#8217;applicazione Laravel\",\"datePublished\":\"2023-08-21T13:28:38+00:00\",\"dateModified\":\"2023-09-01T14:37:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/laravel-throttle\/\"},\"wordCount\":2044,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/laravel-throttle\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/laravel-throttle.jpg\",\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/laravel-throttle\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/laravel-throttle\/\",\"url\":\"https:\/\/kinsta.com\/it\/blog\/laravel-throttle\/\",\"name\":\"Come aggiungere il rate limiting a un'API in un'app Laravel - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/laravel-throttle\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/laravel-throttle\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/laravel-throttle.jpg\",\"datePublished\":\"2023-08-21T13:28:38+00:00\",\"dateModified\":\"2023-09-01T14:37:22+00:00\",\"description\":\"Scopri come aggiungere il rate limiting a un'API in un'applicazione Laravel e mitigare lo sfruttamento delle risorse dell'applicazione.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/laravel-throttle\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/laravel-throttle\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/laravel-throttle\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/laravel-throttle.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/laravel-throttle.jpg\",\"width\":3042,\"height\":1521},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/laravel-throttle\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"API\",\"item\":\"https:\/\/kinsta.com\/it\/argomenti\/api\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Come aggiungere il rate limiting a un&#8217;API in un&#8217;applicazione Laravel\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/it\/#website\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluzioni di hosting premium, veloci e sicure\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/it\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/it\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstaitalia\/\",\"https:\/\/x.com\/Kinsta_IT\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/72bff0015d3fb3ba3d8a85494dc0b116\",\"name\":\"Marcia Ramos\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0d680db24858fdf61a7e7ce3c1a160f5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0d680db24858fdf61a7e7ce3c1a160f5?s=96&d=mm&r=g\",\"caption\":\"Marcia Ramos\"},\"description\":\"I'm the Editorial Team Lead at Kinsta. I'm a open source enthusiast and I love coding. With more than 10 years of technical writing and editing for the tech industry, I love collaborating with people to create clear and concise pieces of content and improve workflows.\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/marciadiasramos\/\"],\"honorificSuffix\":\"B.Sc.\",\"gender\":\"Female\",\"knowsLanguage\":[\"English\",\"Portuguese\"],\"jobTitle\":\"Editorial Team Lead\",\"worksFor\":\"Kinsta Inc.\",\"url\":\"https:\/\/kinsta.com\/it\/blog\/author\/marciaramos\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Come aggiungere il rate limiting a un'API in un'app Laravel - Kinsta\u00ae","description":"Scopri come aggiungere il rate limiting a un'API in un'applicazione Laravel e mitigare lo sfruttamento delle risorse dell'applicazione.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/it\/blog\/laravel-throttle\/","og_locale":"it_IT","og_type":"article","og_title":"Come aggiungere il rate limiting a un'API in un'applicazione Laravel","og_description":"Scopri come aggiungere il rate limiting a un'API in un'applicazione Laravel e mitigare lo sfruttamento delle risorse dell'applicazione.","og_url":"https:\/\/kinsta.com\/it\/blog\/laravel-throttle\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstaitalia\/","article_published_time":"2023-08-21T13:28:38+00:00","article_modified_time":"2023-09-01T14:37:22+00:00","og_image":[{"width":3042,"height":1521,"url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/laravel-throttle.jpg","type":"image\/jpeg"}],"author":"Marcia Ramos","twitter_card":"summary_large_image","twitter_description":"Scopri come aggiungere il rate limiting a un'API in un'applicazione Laravel e mitigare lo sfruttamento delle risorse dell'applicazione.","twitter_image":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/laravel-throttle.jpg","twitter_creator":"@Kinsta_IT","twitter_site":"@Kinsta_IT","twitter_misc":{"Scritto da":"Marcia Ramos","Tempo di lettura stimato":"12 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/it\/blog\/laravel-throttle\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/blog\/laravel-throttle\/"},"author":{"name":"Marcia Ramos","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/72bff0015d3fb3ba3d8a85494dc0b116"},"headline":"Come aggiungere il rate limiting a un&#8217;API in un&#8217;applicazione Laravel","datePublished":"2023-08-21T13:28:38+00:00","dateModified":"2023-09-01T14:37:22+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/laravel-throttle\/"},"wordCount":2044,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/laravel-throttle\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/laravel-throttle.jpg","inLanguage":"it-IT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/it\/blog\/laravel-throttle\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/it\/blog\/laravel-throttle\/","url":"https:\/\/kinsta.com\/it\/blog\/laravel-throttle\/","name":"Come aggiungere il rate limiting a un'API in un'app Laravel - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/laravel-throttle\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/laravel-throttle\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/laravel-throttle.jpg","datePublished":"2023-08-21T13:28:38+00:00","dateModified":"2023-09-01T14:37:22+00:00","description":"Scopri come aggiungere il rate limiting a un'API in un'applicazione Laravel e mitigare lo sfruttamento delle risorse dell'applicazione.","breadcrumb":{"@id":"https:\/\/kinsta.com\/it\/blog\/laravel-throttle\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/it\/blog\/laravel-throttle\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/blog\/laravel-throttle\/#primaryimage","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/laravel-throttle.jpg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/laravel-throttle.jpg","width":3042,"height":1521},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/it\/blog\/laravel-throttle\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/it\/"},{"@type":"ListItem","position":2,"name":"API","item":"https:\/\/kinsta.com\/it\/argomenti\/api\/"},{"@type":"ListItem","position":3,"name":"Come aggiungere il rate limiting a un&#8217;API in un&#8217;applicazione Laravel"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/it\/#website","url":"https:\/\/kinsta.com\/it\/","name":"Kinsta\u00ae","description":"Soluzioni di hosting premium, veloci e sicure","publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/it\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/it\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstaitalia\/","https:\/\/x.com\/Kinsta_IT","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/72bff0015d3fb3ba3d8a85494dc0b116","name":"Marcia Ramos","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0d680db24858fdf61a7e7ce3c1a160f5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0d680db24858fdf61a7e7ce3c1a160f5?s=96&d=mm&r=g","caption":"Marcia Ramos"},"description":"I'm the Editorial Team Lead at Kinsta. I'm a open source enthusiast and I love coding. With more than 10 years of technical writing and editing for the tech industry, I love collaborating with people to create clear and concise pieces of content and improve workflows.","sameAs":["https:\/\/www.linkedin.com\/in\/marciadiasramos\/"],"honorificSuffix":"B.Sc.","gender":"Female","knowsLanguage":["English","Portuguese"],"jobTitle":"Editorial Team Lead","worksFor":"Kinsta Inc.","url":"https:\/\/kinsta.com\/it\/blog\/author\/marciaramos\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/72475","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/users\/290"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/comments?post=72475"}],"version-history":[{"count":11,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/72475\/revisions"}],"predecessor-version":[{"id":72792,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/72475\/revisions\/72792"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72475\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72475\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72475\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72475\/translations\/fr"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72475\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72475\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72475\/translations\/es"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72475\/translations\/de"},{"href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72475\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media\/72476"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media?parent=72475"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/tags?post=72475"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/topic?post=72475"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}