{"id":70714,"date":"2023-06-27T08:05:00","date_gmt":"2023-06-27T07:05:00","guid":{"rendered":"https:\/\/kinsta.com\/it\/?p=70714&#038;post_type=knowledgebase&#038;preview_id=70714"},"modified":"2025-10-01T20:43:17","modified_gmt":"2025-10-01T19:43:17","slug":"api-rate-limiting","status":"publish","type":"post","link":"https:\/\/kinsta.com\/it\/blog\/api-rate-limiting\/","title":{"rendered":"Limitazione delle Richieste API (Rate Limiting): la Guida Definitiva"},"content":{"rendered":"<p>Le API sono un ottimo modo per le applicazioni software di comunicare tra loro, perch\u00e9 permettono alle applicazioni software di interagire e condividere risorse o privilegi.<\/p>\n<p>Oggi molte aziende B2B offrono i loro servizi tramite API che possono essere usate da applicazioni realizzate con qualsiasi linguaggio e framework di programmazione. Tuttavia, questo le rende vulnerabili agli attacchi DoS e DDoS e pu\u00f2 anche portare a una distribuzione non uniforme della larghezza di banda tra gli utenti. Per affrontare questi problemi, viene implementata una tecnica nota come rate limiting delle API. L&#8217;idea \u00e8 semplice: si limita il numero di richieste che gli utenti possono fare all&#8217;API.<\/p>\n<p>In questa guida scopriremo cos&#8217;\u00e8 il rate limiting delle API, i vari modi in cui pu\u00f2 essere implementato e alcune best practice ed esempi da tenere a mente quando si impostano i limiti di richieste per le API.<br \/>\n<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>Cos&#8217;\u00e8 la limitazione delle richieste API?<\/h2>\n<p>In parole povere, la limitazione delle richieste API si riferisce alla definizione di una soglia o di un limite al numero di accessi a un&#8217;<a href=\"https:\/\/kinsta.com\/it\/blog\/api-endpoint\/\">API<\/a> da parte degli utenti. I limiti possono essere decisi in diversi modi.<\/p>\n<h3>1. Limiti basati sull&#8217;utente<\/h3>\n<p>Uno dei modi per impostare un limite di richieste \u00e8 quello di ridurre il numero di volte in cui un determinato utente pu\u00f2 accedere all&#8217;<a href=\"https:\/\/kinsta.com\/it\/blog\/microservizi-vs-api\/\">API<\/a> in un determinato periodo di tempo. Ci\u00f2 pu\u00f2 essere ottenuto contando il numero di richieste effettuate utilizzando la stessa chiave API o lo stesso indirizzo IP; quando viene raggiunta una soglia, le ulteriori richieste vengono limitate o negate.<\/p>\n<h3>2. Limiti basati sulla posizione<\/h3>\n<p>In molti casi, gli sviluppatori vogliono distribuire equamente la larghezza di banda disponibile per le loro API in determinate localit\u00e0 geografiche.<\/p>\n<p>Il recente servizio di anteprima di <a href=\"https:\/\/kinsta.com\/it\/blog\/clone-di-chatgpt\/\">ChatGPT<\/a> \u00e8 un buon esempio di <a href=\"https:\/\/twitter.com\/codewithvoid\/status\/1619372391179714560?s=20&#038;t=C0RHEAxKC2xVEnpcLEQ9_Q\" target=\"_blank\" rel=\"noopener noreferrer\">limitazione delle richieste in base alla posizione geografica<\/a>, in quanto ha iniziato a limitare le richieste in base alla posizione degli utenti sulla versione gratuita del servizio dopo l&#8217;introduzione della versione a pagamento. Questo ha senso in quanto la versione di anteprima gratuita doveva essere utilizzata da persone di tutto il mondo per generare un buon campione di dati di utilizzo per il servizio.<\/p>\n<h3>3. Limiti basati sul server<\/h3>\n<p>Il limite di richieste basato sul server \u00e8 un limite interno implementato sul lato server per garantire una distribuzione equa delle risorse del server come CPU, memoria, spazio su disco, ecc. Si realizza implementando un limite su ogni server di una distribuzione.<\/p>\n<p>Quando un server raggiunge il suo limite, le richieste in arrivo vengono instradate verso un altro server con capacit\u00e0 disponibile. Se tutti i server hanno raggiunto la capacit\u00e0, l&#8217;utente riceve una risposta <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Status\/429\" target=\"_blank\" rel=\"noopener noreferrer\">429 Too Many Requests<\/a>. \u00c8 importante notare che i limiti di richieste basati sui server vengono applicati a tutti i client, indipendentemente dalla loro posizione geografica, dall&#8217;orario di accesso o da altri fattori.<\/p>\n\n<h2>Tipi di limiti alle richieste API<\/h2>\n<p>Oltre alla natura dell&#8217;implementazione dei limiti di richieste, \u00e8 possibile classificare i limiti di richieste in base al loro effetto sull&#8217;utente finale. Alcuni tipi comuni sono:<\/p>\n<ul>\n<li><b>Limiti rigidi:<\/b> Si tratta di limiti rigidi che, una volta superati, limitano completamente l&#8217;accesso dell&#8217;utente alla risorsa fino a quando il limite non viene rimosso.<\/li>\n<li><b>Limiti morbidi:<\/b> Sono limiti flessibili che, una volta superati, possono permettere all&#8217;utente di accedere alla risorsa ancora un paio di volte (o di limitare le richieste) prima di chiudere l&#8217;accesso.<\/li>\n<li><b>Limiti dinamici:<\/b> Questi limiti dipendono da diversi fattori come il carico del server, il traffico di rete, la posizione dell&#8217;utente, l&#8217;attivit\u00e0 dell&#8217;utente, la distribuzione del traffico, ecc. e vengono modificati in tempo reale per garantire un funzionamento efficiente delle risorse.<\/li>\n<li><b>Limiti di accesso:<\/b> Questi limiti non interrompono l&#8217;accesso alla risorsa, ma rallentano o mettono in coda le richieste in arrivo fino a quando il limite non viene rimosso.<\/li>\n<li><b>Limiti fatturabili:<\/b> Questi limiti non limitano l&#8217;accesso o la velocit\u00e0, ma addebitano all&#8217;utente il costo di ulteriori richieste quando viene superata la soglia libera impostata.<\/li>\n<\/ul>\n<h2>Perch\u00e9 il rate limiting \u00e8 necessario?<\/h2>\n<p>Ci sono diversi motivi per cui \u00e8 necessario implementare il rate limiting nelle vostre <a href=\"https:\/\/kinsta.com\/it\/blog\/architettura-applicazioni-web\/\">API web<\/a>. Alcuni dei motivi principali sono:<\/p>\n<h3>1. Proteggere l&#8217;accesso alle risorse<\/h3>\n<p>Il primo motivo per cui dovreste prendere in considerazione l&#8217;implementazione di un limite di richieste delle API nella vostra applicazione \u00e8 quello di proteggere le vostre risorse dallo sfruttamento eccessivo da parte di utenti con intenti malevoli. Gli aggressori possono usare tecniche come gli <a href=\"https:\/\/www.cloudflare.com\/learning\/ddos\/what-is-a-ddos-attack\/\" target=\"_blank\" rel=\"noopener noreferrer\">attacchi DDoS<\/a> per monopolizzare l&#8217;accesso alle vostre risorse e impedire alla vostra app di funzionare normalmente per gli altri utenti. La presenza di un limite di richieste fa in modo che gli aggressori non abbiano vita facile se vogliono interrompere le vostre API.<\/p>\n<h3>2. Dividere la quota tra gli utenti<\/h3>\n<p>Oltre a proteggere le vostre risorse, il limite di richieste vi permette di suddividere le risorse API tra gli utenti. Ci\u00f2 significa che potete creare modelli di prezzo differenziati e soddisfare le esigenze dinamiche dei vostri clienti senza che queste si ripercuotano sugli altri.<\/p>\n<h3>3. Migliorare l&#8217;efficienza dei costi<\/h3>\n<p>La limitazione delle tariffe equivale anche a una limitazione dei costi. Ci\u00f2 significa che potete distribuire in modo oculato le risorse tra i vostri utenti. Con una struttura partizionata, \u00e8 pi\u00f9 facile stimare i costi necessari per la manutenzione del sistema. Eventuali picchi possono essere gestiti in modo intelligente fornendo o disattivando la giusta quantit\u00e0 di risorse.<\/p>\n<h3>4. Gestire il flusso tra i worker<\/h3>\n<p>Molte API si basano su un&#8217;architettura distribuita che usa pi\u00f9 worker\/thread\/istanze per gestire le richieste in arrivo. In una struttura di questo tipo, potete usare dei limiti di richieste per controllare il carico di lavoro passato a ciascun nodo worker. Questo pu\u00f2 aiutarvi a garantire che i nodi worker ricevano carichi di lavoro equi e sostenibili. Potete facilmente aggiungere o rimuovere i worker quando necessario senza dover ristrutturare l&#8217;intero gateway API.<\/p>\n<h2>Capire i limiti di burst<\/h2>\n<p>Un altro modo comune di controllare l&#8217;uso delle API \u00e8 quello di impostare un limite di burst (noto anche come throttling) invece di un limite di richieste. I limiti di burst sono limiti di richieste implementati per un intervallo di tempo molto piccolo, come alcuni secondi. Per esempio, invece di impostare un limite di 1,3 milioni di richieste al mese, potete impostare un limite di 5 richieste al secondo. Sebbene ci\u00f2 equivalga allo stesso traffico mensile, garantisce che i vostri clienti non sovraccarichino i vostri server inviando migliaia di richieste in una volta sola.<\/p>\n<p>Nel caso dei limiti di burst, le richieste vengono spesso rimandate all&#8217;intervallo successivo invece di essere rifiutate. Inoltre, spesso si consiglia di usare sia i limiti di richieste che quelli di burst insieme per un controllo ottimale del traffico e dell&#8217;utilizzo.<\/p>\n<h2>3 Metodi di implementazione del rate limiting<\/h2>\n<p>Per quanto riguarda l&#8217;implementazione, ci sono alcuni metodi che potete usare per impostare il rate limiting delle API nella vostra applicazione. Tra questi ci sono:<\/p>\n<h3>1. Code di richiesta<\/h3>\n<p>Uno dei metodi pi\u00f9 semplici per limitare l&#8217;accesso alle API \u00e8 quello delle code di richieste. Le code di richieste si riferiscono a un meccanismo in cui le richieste in arrivo vengono memorizzate sotto forma di coda ed elaborate una dopo l&#8217;altra fino a un certo limite.<\/p>\n<p>Un caso d&#8217;uso comune delle code di richieste \u00e8 la separazione delle richieste in arrivo da utenti gratuiti e a pagamento. Ecco come potete farlo in un&#8217;<a href=\"https:\/\/kinsta.com\/it\/blog\/cos-e-express-js\/\">applicazione Express<\/a> usando il pacchetto <code>express-queue<\/code>:<\/p>\n<pre><code class=\"language-js\">const express = require('express')\nconst expressQueue = require('express-queue');\n\nconst app = express()\n\nconst freeRequestsQueue = expressQueue({\n\tactiveLimit: 1, \/\/ Maximum requests to process at once\n\tqueuedLimit: -1 \/\/ Maximum requests allowed in queue (-1 means unlimited)\n});\n\nconst paidRequestsQueue = expressQueue({\n\tactiveLimit: 5, \/\/ Maximum requests to process at once\n\tqueuedLimit: -1 \/\/ Maximum requests allowed in queue (-1 means unlimited)\n});\n\n\/\/ Middleware that selects the appropriate queue handler based on the presence of an API token in the request\nfunction queueHandlerMiddleware(req, res, next) {\n\t\/\/ Check if the request contains an API token\n\tconst apiToken = req.headers['api-token'];\n\n\tif (apiToken && isValidToken(apiToken)) {\n    \tconsole.log(\"Paid request received\")\n    \tpaidRequestsQueue(req, res, next);\n\t} else {\n    \tconsole.log(\"Free request received\")\n    \tfreeRequestsQueue(req, res, next);\n \t}\n}\n\n\/\/ Add the custom middleware function to the route\napp.get('\/route', queueHandlerMiddleware, (req, res) =&gt; {\n\tres.status(200).json({ message: \"Processed!\" })\n});\n\n\/\/ Check here is the API token is valid or not\nconst isValidToken = () =&gt; {\n\treturn true;\n}\n\napp.listen(3000);<\/code><\/pre>\n<h3>2. Throttling<\/h3>\n<p>Il throttling \u00e8 un&#8217;altra tecnica usata per controllare l&#8217;accesso alle API. Invece di interrompere l&#8217;accesso dopo il raggiungimento di una soglia, il throttling si concentra sull&#8217;attenuazione dei picchi di traffico delle API implementando piccole soglie per piccoli intervalli di tempo. Invece di stabilire un limite di richieste come 3 milioni di chiamate al mese, il throttling stabilisce limiti di 10 chiamate al secondo. Una volta che un cliente invia pi\u00f9 di 10 chiamate in un secondo, le richieste successive nello stesso secondo vengono automaticamente limitate, ma il cliente riacquista immediatamente l&#8217;accesso all&#8217;API nel secondo successivo.<\/p>\n<p>Potete implementare il throttling in Express usando il pacchetto <code>express-throttle<\/code>. Ecco un esempio di applicazione Express che mostra come impostare il throttling nella vostra applicazione:<\/p>\n<pre><code class=\"language-js\">const express = require('express')\nconst throttle = require('express-throttle')\n\nconst app = express()\n\nconst throttleOptions = {\n\t\"rate\": \"10\/s\",\n\t\"burst\": 5,\n\t\"on_allowed\": function (req, res, next, bucket) {\n    \tres.set(\"X-Rate-Limit-Limit\", 10);\n    \tres.set(\"X-Rate-Limit-Remaining\", bucket.tokens);\n    \tnext()\n\t},\n\t\"on_throttled\": function (req, res, next, bucket) {\n    \t\/\/ Notify client\n    \tres.set(\"X-Rate-Limit-Limit\", 10);\n    \tres.set(\"X-Rate-Limit-Remaining\", 0);\n    \tres.status(503).send(\"System overloaded, try again after a few seconds.\");\n\t}\n}\n\n\/\/ Add the custom middleware function to the route\napp.get('\/route', throttle(throttleOptions), (req, res) =&gt; {\n\tres.status(200).json({ message: \"Processed!\" })\n});\n\napp.listen(3000);<\/code><\/pre>\n<p>Potete testare l&#8217;applicazione usando uno strumento di test di carico come <a href=\"https:\/\/www.npmjs.com\/package\/autocannon\" target=\"_blank\" rel=\"noopener noreferrer\">AutoCannon<\/a>. Potete installare AutoCannon eseguendo il seguente comando nel vostro terminale:<\/p>\n<pre><code>npm install autocannon -g<\/code><\/pre>\n<p>Potete testare l&#8217;applicazione con il seguente comando:<\/p>\n<pre><code>autocannon http:\/\/localhost:3000\/route<\/code><\/pre>\n<p>Il test usa 10 connessioni simultanee che inviano richieste all&#8217;API. Ecco il risultato del test:<\/p>\n<pre><code>Running 10s test @ http:\/\/localhost:3000\/route\n\n10 <span id=\"urn:enhancement-4eaa7348-ed91-4b33-b55a-bb439e7f82d0\" class=\"textannotation\">connections<\/span>\n\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 Stat\t\u2502 2.5% \u2502 50%  \u2502 97.5% \u2502 99%  \u2502 Avg \t\u2502 Stdev   \u2502 Max   \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 Latency \u2502 0 ms \u2502 0 ms \u2502 1 ms  \u2502 1 ms \u2502 0.04 ms \u2502 0.24 ms \u2502 17 ms \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 Stat  \t\u2502 1%  \t\u2502 2.5%\t\u2502 50%\t\u2502 97.5%   \u2502 Avg\t\u2502 Stdev   \u2502 Min \t\u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 Req\/Sec   \u2502 16591   \u2502 16591   \u2502 19695  \u2502 19903   \u2502 19144  \u2502 1044.15 \u2502 16587   \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 Bytes\/Sec \u2502 5.73 MB \u2502 5.73 MB \u2502 6.8 MB \u2502 6.86 MB \u2502 6.6 MB \u2502 360 kB  \u2502 5.72 MB \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n\nReq\/Bytes counts sampled once per second.\n# of samples: 11\n114 2xx responses, 210455 non 2xx responses\n211k requests in 11.01s, 72.6 MB read<\/code><\/pre>\n<p>Poich\u00e9 erano consentite solo 10 richieste al secondo (con un picco extra di 5 richieste), solo 114 richieste sono state elaborate con successo dall&#8217;API, mentre alle restanti richieste \u00e8 stato risposto con un codice di errore 503 che chiedeva di attendere un po&#8217; di tempo.<\/p>\n<h3>3. Algoritmi di rate limiting<\/h3>\n<p>Sebbene il rate limiting sembri un concetto semplice da implementare tramite una coda, in realt\u00e0 pu\u00f2 essere implementato in diversi modi che offrono altri vantaggi. Ecco alcuni algoritmi popolari che si usano per implementare il rate limiting:<\/p>\n<h4>Algoritmo a finestra fissa<\/h4>\n<p>L&#8217;algoritmo a finestra fissa \u00e8 uno dei pi\u00f9 semplici algoritmi di limitazione delle richieste. Limita il numero di richieste che possono essere gestite in un intervallo di tempo fisso.<\/p>\n<p>Si stabilisce un numero fisso di richieste, per esempio 100, che possono essere gestite dal server API in un&#8217;ora. Ora, quando arriva la 101esima richiesta, l&#8217;algoritmo nega l&#8217;elaborazione. Quando l&#8217;intervallo di tempo si ripristina (cio\u00e8 nell&#8217;ora successiva), \u00e8 possibile elaborare altre 100 richieste in arrivo.<\/p>\n<p>Questo algoritmo \u00e8 semplice da implementare e funziona bene in molti casi in cui \u00e8 necessario limitare la velocit\u00e0 sul lato server per controllare la larghezza di banda (a differenza della distribuzione della larghezza di banda tra gli utenti). Tuttavia, pu\u00f2 dare luogo a un traffico\/elaborazione a scatti verso i margini dell&#8217;intervallo di tempo fissato. L&#8217;algoritmo a finestra scorrevole \u00e8 un&#8217;alternativa migliore nei casi in cui \u00e8 necessaria un&#8217;elaborazione uniforme.<\/p>\n<h4>Algoritmo a Finestra Scorrevole<\/h4>\n<p>L&#8217;algoritmo a finestra scorrevole \u00e8 una variante dell&#8217;algoritmo a finestra fissa. Invece di usare intervalli di tempo fissi e predefiniti, questo algoritmo usa una finestra temporale mobile per monitorare il numero di richieste elaborate e in arrivo.<\/p>\n<p>Invece di considerare gli intervalli di tempo assoluti (per esempio di 60 secondi ciascuno), come da 0 a 60, da 61 a 120 e cos\u00ec via, l&#8217;algoritmo a finestra mobile considera i 60 secondi precedenti a partire dal momento in cui viene ricevuta una richiesta. Supponiamo che una richiesta venga ricevuta all&#8217;82\u00b0 secondo; allora l&#8217;algoritmo conter\u00e0 il numero di richieste elaborate tra 22s e 82s (invece dell&#8217;intervallo assoluto 60s &#8211; 120s) per determinare se questa richiesta pu\u00f2 essere elaborata o meno. In questo modo si possono evitare situazioni in cui un gran numero di richieste viene elaborato sia al 59\u00b0 che al 61\u00b0 secondo, sovraccaricando il server per un periodo molto breve.<\/p>\n<p>Questo algoritmo \u00e8 in grado di gestire meglio i picchi di traffico, ma pu\u00f2 essere pi\u00f9 difficile da implementare e mantenere rispetto all&#8217;algoritmo a finestra fissa.<\/p>\n<h4>Algoritmo token bucket<\/h4>\n<p>In questo algoritmo, un contenitore (\u201cbucket\u201d) fittizio viene riempito di token e ogni volta che il server elabora una richiesta, un token viene prelevato dal contenitore. Quando il contenitore \u00e8 vuoto, il server non pu\u00f2 pi\u00f9 elaborare richieste. Ulteriori richieste vengono ritardate o negate fino a quando il contenitore non viene riempito di nuovo.<\/p>\n<p>Il token bucket viene riempito a una velocit\u00e0 fissa (nota come \u201ctoken generation rate\u201d, velocit\u00e0 di generazione dei token) e il numero massimo di token che possono essere immagazzinati nel contenitore \u00e8 anch&#8217;esso fisso (noto come \u201cbucket depth\u201d, profondit\u00e0 del contenitore).<\/p>\n<p>Controllando la velocit\u00e0 di rigenerazione dei token e la profondit\u00e0 del bucket, potete controllare la velocit\u00e0 massima del flusso di traffico consentito dall&#8217;API. Il pacchetto <code>express-throttle<\/code>, visto in precedenza, usa l&#8217;algoritmo del token bucket per limitare o controllare il flusso di traffico dell&#8217;API.<\/p>\n<p>Il vantaggio principale di questo algoritmo \u00e8 che supporta i picchi di traffico, a patto che possa essere contenuto nella profondit\u00e0 del bucket. Questo \u00e8 particolarmente utile per il traffico imprevedibile.<\/p>\n<h4>Algoritmo leaky bucket<\/h4>\n<p>L&#8217;algoritmo leaky bucket \u00e8 un altro algoritmo per gestire il traffico API. Invece di mantenere una profondit\u00e0 del bucket che determina quante richieste possono essere gestite in un lasso di tempo (come nel caso del token bucket), consente un flusso fisso di richieste dal bucket, come con un flusso costante di acqua da un contenitore che perde.<\/p>\n<p>La profondit\u00e0 del contenitore, in questo caso, serve a determinare quante richieste possono essere messe in coda per essere elaborate prima che il contenitore inizi a traboccare, cio\u00e8 a negare le richieste in arrivo.<\/p>\n<p>Il leaky bucket promette un flusso costante di richieste e, a differenza del token bucket, non gestisce i picchi di traffico.<\/p>\n<h2>Le best practice per il rate limiting delle API<\/h2>\n<p>Ora che avete capito cos&#8217;\u00e8 il rate limiting delle API e come viene implementato, condividiamo alcune buone pratiche da prendere in considerazione per implementarlo nella vostra applicazione.<\/p>\n<h3>Offrire un livello gratuito agli utenti per esplorare i servizi<\/h3>\n<p>Quando pensate di implementare un limite di richieste per le API, cercate sempre di offrire un livello gratuito adeguato che i vostri potenziali utenti possano usare per provare le vostre API. Non deve essere molto generoso, ma dovrebbe essere sufficiente per consentire agli utenti di testare comodamente la vostra API nella loro applicazione di sviluppo.<\/p>\n<p>Se da un lato i limiti di richieste delle API sono fondamentali per mantenere la qualit\u00e0 degli endpoint delle API per i vostri utenti, dall&#8217;altro un piccolo livello gratuito non soggetto a limitazioni pu\u00f2 aiutarvi a conquistare nuovi utenti.<\/p>\n<h3>Decidere cosa succede quando il limite di richieste viene superato<\/h3>\n<p>Quando un utente supera il limite di richieste dell&#8217;API che avete impostato, ci sono un paio di cose di cui dovreste occuparvi per garantire un&#8217;esperienza positiva agli utenti e allo stesso tempo proteggere le vostre risorse. Alcune domande che dovreste porvi e considerazioni da fare sono:<\/p>\n<h4>Quale codice di errore e quale messaggio vedranno gli utenti?<\/h4>\n<p>La prima cosa che dovete fare \u00e8 informare i vostri utenti che hanno superato il limite di richieste impostato per l&#8217;API . Per farlo, dovete modificare la risposta dell&#8217;API con un messaggio predefinito che spieghi il problema. <i>\u00c8 importante che il codice di stato di questa risposta sia 429 &#8220;Too Many Requests&#8221;.<\/i> \u00c8 inoltre consuetudine spiegare il problema nel corpo della risposta.<br \/>\nEcco come potrebbe apparire un esempio di risposta:<\/p>\n<pre><code class=\"language-js\">{\n\t\"error\": \"Too Many Requests\",\n\t\"message\": \"You have exceeded the set API rate limit of X requests per minute. Please try again in a few minutes.\",\n\t\"retry_after\": 60\n}<\/code><\/pre>\n<p>Il corpo di risposta di esempio mostrato sopra riporta il nome e la descrizione dell&#8217;errore e specifica anche una durata (solitamente in secondi) dopo la quale l&#8217;utente pu\u00f2 riprovare a inviare le richieste. Un corpo di risposta descrittivo come questo aiuta gli utenti a capire cos&#8217;\u00e8 andato storto e perch\u00e9 non hanno ricevuto la risposta che si aspettavano. Inoltre, consente loro di sapere quanto tempo attendere prima di inviare un&#8217;altra richiesta.<\/p>\n<h4>Le nuove richieste saranno limitate o completamente bloccate?<\/h4>\n<p>Un altro nodo di decisione \u00e8 cosa fare dopo che un utente ha superato il limite di impostato stabilito per l&#8217;API. Di solito si limita l&#8217;interazione dell&#8217;utente con il server inviando una risposta 429 &#8220;Too Many Requests&#8221;, come abbiamo visto sopra. Tuttavia, dovreste prendere in considerazione anche un approccio alternativo: il throttling.<\/p>\n<p>Invece di interrompere completamente l&#8217;accesso alla risorsa del server, potete rallentare il numero totale di richieste che l&#8217;utente pu\u00f2 inviare in un determinato periodo di tempo. Questa soluzione \u00e8 utile quando volete dare agli utenti una piccola \u201cbacchettata\u201d, ma permettere loro di continuare a lavorare se riducono il volume delle richieste.<\/p>\n<h3>Considerare il caching e il circuit breaking<\/h3>\n<p>I limiti di richieste delle API sono spiacevoli: limitano l&#8217;interazione e l&#8217;utilizzo dei vostri servizi API da parte dei vostri utenti. Questo \u00e8 particolarmente grave per gli utenti che devono fare richieste simili pi\u00f9 volte, come per esempio accedere a un set di dati sulle previsioni del tempo che viene aggiornato solo settimanalmente o recuperare un elenco di opzioni per un menu a tendina che potrebbe essere cambiato una volta ogni morte di papa. In questi casi, un approccio intelligente sarebbe quello di implementare il caching.<\/p>\n<p>Il <a href=\"https:\/\/kinsta.com\/it\/docs\/hosting-wordpress\/cache\/cache-del-sito\/#site-cache-expiration\">caching<\/a> \u00e8 un&#8217;astrazione di archiviazione ad alta velocit\u00e0 che si implementa nei casi in cui il volume di accesso ai dati \u00e8 elevato, ma i dati non cambiano molto spesso. Invece di effettuare una chiamata API che potrebbe invocare pi\u00f9 servizi interni e comportare spese ingenti, potreste mettere in cache gli endpoint utilizzati pi\u00f9 di frequente in modo che la seconda richiesta venga servita dalla cache statica, che di solito \u00e8 pi\u00f9 veloce, pi\u00f9 economica e pu\u00f2 ridurre il carico di lavoro dei vostri servizi principali.<\/p>\n<p>Pu\u00f2 esserci un altro caso in cui si riceve un numero insolitamente alto di richieste da parte di un utente. Anche dopo aver impostato un limite di richieste, l&#8217;utente raggiunge costantemente la sua capacit\u00e0 e viene limitato. Queste situazioni indicano la possibilit\u00e0 di un potenziale abuso dell&#8217;API.<\/p>\n<p>Per proteggere i vostri servizi dal sovraccarico e mantenere un&#8217;esperienza uniforme per il resto degli utenti, dovreste considerare di limitare completamente l&#8217;accesso dell&#8217;utente sospetto all&#8217;API. Questo metodo \u00e8 noto come circuit breaking e, sebbene sembri simile al rate limiting, viene generalmente utilizzato quando il sistema si trova ad affrontare un sovraccarico di richieste e ha bisogno di tempo per rallentare e recuperare la qualit\u00e0 del servizio.<\/p>\n<h3>Controllare attentamente la configurazione<\/h3>\n<p>Sebbene i limiti di richieste delle API abbiano lo scopo di distribuire equamente le risorse tra i vostri utenti, a volte possono causare loro problemi inutili o addirittura indicare attivit\u00e0 sospette.<\/p>\n<p>L&#8217;installazione di una <a href=\"https:\/\/kinsta.com\/it\/blog\/monitoraggio-prestazioni-applicazioni\/\">solida soluzione di monitoraggio<\/a> per la vostra API pu\u00f2 aiutarvi a capire quanto spesso i limiti di richieste vengono raggiunti dai vostri utenti, a capire se \u00e8 necessario riconsiderare i limiti generali tenendo conto del carico di lavoro medio degli utenti e a identificare gli utenti che superano frequentemente i loro limiti (il che potrebbe indicare che hanno bisogno di un aumento dei loro limiti a breve o che devono essere monitorati per attivit\u00e0 sospette). In ogni caso, un monitoraggio attivo vi aiuter\u00e0 a capire meglio l&#8217;impatto dei limiti di richieste delle API.<\/p>\n<h3>Implementare il rate limiting su pi\u00f9 livelli<\/h3>\n<p>Il rate limiting pu\u00f2 essere implementato su pi\u00f9 livelli (utente, applicazione o sistema). Molte persone commettono l&#8217;errore di impostare i limiti di richieste a uno solo di questi livelli e di aspettarsi che copra tutti i casi possibili. Sebbene non sia esattamente un anti-pattern, in alcuni casi pu\u00f2 rivelarsi inefficace.<\/p>\n<p>Se le richieste in arrivo sovraccaricano l&#8217;interfaccia di rete del sistema, la limitazione delle richieste a livello di applicazione potrebbe non essere in grado di ottimizzare i carichi di lavoro. Per questo motivo \u00e8 meglio impostare le regole di limitazione del tasso a pi\u00f9 livelli, preferibilmente ai livelli pi\u00f9 alti della vostra architettura, per garantire che non si creino colli di bottiglia.<\/p>\n<h2>Lavorare con i limiti di richieste delle API<\/h2>\n<p>In questa sezione vediamo come testare i limiti di richieste dell&#8217;API per un determinato endpoint API e come implementare un controllo dell&#8217;utilizzo sul vostro client per assicurarvi di non esaurire i limiti dell&#8217;API remota.<\/p>\n<h3>Come verificare i limiti di richieste delle API<\/h3>\n<p>Per identificare i limiti di richieste di un&#8217;API, il primo approccio dovrebbe essere quello di leggere i documenti dell&#8217;API per verificare se i limiti sono stati chiaramente definiti. Nella maggior parte dei casi, i documenti delle API vi indicheranno il limite e come \u00e8 stato implementato. Dovreste ricorrere al &#8220;test&#8221; del limite di richieste dell&#8217;API per identificarlo solo quando non riuscite a individuarlo dai documenti dell&#8217;API, dal supporto o dalla comunit\u00e0. Questo perch\u00e9 testare un&#8217;API per trovare il suo limite di richieste significa che finirete per esaurire il vostro limite di richieste almeno una volta, il che potrebbe comportare costi finanziari e\/o l&#8217;indisponibilit\u00e0 dell&#8217;API per un certo periodo.<\/p>\n<p>Se volete identificare manualmente il limite di richieste, dovreste iniziare con un semplice strumento di test delle API come Postman per effettuare richieste manuali all&#8217;API e vedere se riuscite a esaurire il suo limite di richieste. Se non ci riuscite, potete utilizzare uno strumento di test di carico come Autocannon o Gatling per simulare un gran numero di richieste e vedere quante richieste vengono gestite dall&#8217;API prima che inizi a rispondere con un codice di stato 429.<\/p>\n<p>Un altro approccio pu\u00f2 essere quello di usare uno strumento di controllo dei limiti di richieste come AppBrokers <code><a href=\"https:\/\/github.com\/AppBroker\/rate-limit-test-tool\" target=\"_blank\" rel=\"noopener noreferrer\">rate-limit-test-tool<\/a><\/code>. Strumenti dedicati come questo automatizzano il processo e vi forniscono anche un&#8217;interfaccia utente per analizzare attentamente i risultati del test.<\/p>\n<p>Tuttavia, se non siete sicuri del limite di richieste di un&#8217;API, potete sempre provare a stimare le vostre richieste e impostare dei limiti sul lato client per assicurarvi che il numero di richieste della vostra applicazione non superi tale numero. Scoprirete come farlo nella prossima sezione.<\/p>\n<h3>Come limitare le chiamate API<\/h3>\n<p>Se dal vostro codice effettuate delle chiamate a un&#8217;API, potreste voler implementare il throttle lato vostro per evitare di effettuare accidentalmente troppe chiamate all&#8217;API e di esaurire il vostro limite API. Ci sono diversi modi per farlo. Uno dei metodi pi\u00f9 diffusi \u00e8 quello di utilizzare il metodo throttle della libreria di utility lodash.<\/p>\n<p>Prima di iniziare a fare il throttling di una chiamata API, dovrete creare un&#8217;API. Ecco un esempio di codice per un&#8217;API basata su Node.js che restituisce nella console il numero medio di richieste ricevute al minuto:<\/p>\n<pre><code class=\"language-js\">const express = require('express');\nconst app = express();\n\n\/\/ maintain a count of total requests\nlet requestTotalCount = 0;\nlet startTime = Date.now();\n\n\/\/ increase the count whenever any request is received\napp.use((req, res, next) =&gt; {\n\trequestTotalCount++;\n\tnext();\n});\n\n\/\/ After each second, print the average number of requests received per second since the server was started\nsetInterval(() =&gt; {\n\tconst elapsedTime = (Date.now() - startTime) \/ 1000;\n\tconst averageRequestsPerSecond = requestTotalCount \/ elapsedTime;\n\tconsole.log(`Average requests per second: ${averageRequestsPerSecond.toFixed(2)}`);\n}, 1000);\n\napp.get('\/', (req, res) =&gt; {\n\tres.send('Hello World!');\n});\n\napp.listen(3000, () =&gt; {\n\tconsole.log('Server listening on port 3000!');\n});<\/code><\/pre>\n<p>Una volta eseguita, l&#8217;applicazione restituir\u00e0 il numero medio di richieste ricevute ogni secondo:<\/p>\n<pre><code>Average requests per second: 0\nAverage requests per second: 0\nAverage requests per second: 0<\/code><\/pre>\n<p>Quindi, create un nuovo file JavaScript con il nome di <b>test-throttle.js<\/b> e salvate in esso il seguente codice:<\/p>\n<pre><code class=\"language-js\">\/\/ function that calls the API and prints the response\nconst request = () =&gt; {\n\tfetch('http:\/\/localhost:3000')\n\t.then(r =&gt; r.text())\n\t.then(r =&gt; console.log(r))\n}\n\n\/\/ Loop to call the request function once every 100 ms, i.e., 10 times per second\nsetInterval(request, 100)<\/code><\/pre>\n<p>Una volta eseguito questo script, noterete che il numero medio di richieste del server salta quasi a 10:<\/p>\n<pre><code>Average requests per second: 9.87\nAverage requests per second: 9.87\nAverage requests per second: 9.88<\/code><\/pre>\n<p>E se questa API permettesse solo 6 richieste al secondo, per esempio? Vorreste mantenere il numero medio di richieste al di sotto di questa soglia. Tuttavia, se il vostro client invia una richiesta in base a un&#8217;attivit\u00e0 dell&#8217;utente, come il clic di un pulsante o uno scroll, potreste non essere in grado di limitare il numero di volte in cui la chiamata API viene attivata.<\/p>\n<p>La funzione <code>throttle()<\/code> della libreria <code>lodash<\/code> pu\u00f2 aiutarvi in questo caso. Prima di tutto, installate la libreria eseguendo il seguente comando:<\/p>\n<pre><code>npm install lodash<\/code><\/pre>\n<p>Quindi, aggiornate il file <b>test-throttle.js<\/b> in modo che contenga il seguente codice:<\/p>\n<pre><code class=\"language-js\">\/\/ import the lodash library\nconst { throttle } = require('lodash');\n\n\/\/ function that calls the API and prints the response\nconst request = () =&gt; {\n\tfetch('http:\/\/localhost:3000')\n\t.then(r =&gt; r.text())\n\t.then(r =&gt; console.log(r))\n}\n\n\/\/ create a throttled function that can only be called once every 200 ms, i.e., only 5 times every second\nconst throttledRequest = throttle(request, 200)\n\n\/\/ loop this throttled function to be called once every 100 ms, i.e., 10 times every second\nsetInterval(throttledRequest, 100)<\/code><\/pre>\n<p>Ora, se guardate i log del server, vedrete un output simile:<\/p>\n<pre><code>Average requests per second: 4.74\nAverage requests per second: 4.80\nAverage requests per second: 4.83\n<\/code><\/pre>\n<p>Questo significa che anche se la vostra applicazione chiama la funzione <code>request<\/code> 10 volte al secondo, la funzione di throttling fa in modo che venga chiamata solo 5 volte al secondo, aiutandovi a rimanere sotto il limite di richieste. Ecco come potete impostare il throttling lato client per evitare di esaurire i limiti di richieste delle API.<\/p>\n<h2>Errori comuni dei limiti di richieste delle API<\/h2>\n<p>Quando lavorate con le API rate-limited, potreste incontrare una serie di risposte che indicano il superamento di un limite di richieste. Nella maggior parte dei casi, riceverete il codice di stato 429 con un messaggio simile a uno di questi:<\/p>\n<ul>\n<li>Calls to this API have exceeded the rate limit (\u201cle chiamate a questa API hanno superato il limite impostato di richieste\u201d)<\/li>\n<li>\u201dAPI rate limit exceeded\u201d (limite di richieste API superato)<\/li>\n<li>429 Too Many Requests (\u201ctroppe richieste\u201d)<\/li>\n<\/ul>\n<p>Il messaggio che ricevete per\u00f2 dipende dall&#8217;implementazione dell&#8217;API che state usando. Questa implementazione pu\u00f2 variare e alcune API potrebbero anche non utilizzare affatto il codice di stato 429. Ecco alcuni altri tipi di codici di errore e messaggi relativi al limite di rate-limited:<\/p>\n<ul>\n<li><b>403 Forbidden<\/b> o <b>401 Unauthorized<\/b>: Alcune API possono iniziare a trattare le vostre richieste come non autorizzate, negandovi quindi l&#8217;accesso alla risorsa.<\/li>\n<li><b>503 Service Unavailable<\/b> o <b>500 Internal Server Error<\/b>: Se un&#8217;API \u00e8 sovraccarica di richieste in arrivo, potrebbe iniziare a inviare messaggi di errore 5XX che indicano che il server non \u00e8 in salute. Di solito si tratta di un problema temporaneo che viene risolto dal fornitore del servizio a tempo debito.<\/li>\n<\/ul>\n<h2>Come i migliori fornitori di API implementano i limiti di richieste delle API<\/h2>\n<p>Quando dovete impostare il limite di richieste per la vostra API, pu\u00f2 essere utile dare un&#8217;occhiata a come lo fanno alcuni dei migliori fornitori di API:<\/p>\n<ul>\n<li><b>Discord<\/b>: <a href=\"https:\/\/kinsta.com\/it\/blog\/slack-vs-discord\/\">Discord<\/a> implementa la limitazione delle richieste in due modi: c&#8217;\u00e8 un limite globale di 50 richieste al secondo. Oltre al limite globale, bisogna tenere a mente anche i limiti specifici per ogni percorso. Potete leggere tutto in questa <a href=\"https:\/\/discord.com\/developers\/docs\/topics\/rate-limits\" target=\"_blank\" rel=\"noopener noreferrer\">documentazione<\/a>. Quando il limite di richieste viene superato, riceverete una risposta HTTP 429 con un valore <code>retry_after<\/code> che potrete usare per attendere prima di inviare un&#8217;altra richiesta.<\/li>\n<li><b>Twitter<\/b>: anche Twitter ha dei limiti di richieste specifici per le route che potete trovare nella sua <a href=\"https:\/\/developer.twitter.com\/en\/docs\/twitter-api\/rate-limits\" target=\"_blank\" rel=\"noopener noreferrer\">documentazione<\/a>. Una volta superato il limite di richieste, riceverete una risposta HTTP 429 con un valore di intestazione <code>x-rate-limit-reset<\/code> che vi indicher\u00e0 quando potrete riprendere l&#8217;accesso.<\/li>\n<li><b>Reddit<\/b>: il wiki sulle API archiviate di Reddit indica che il limite di accesso all&#8217;API di Reddit \u00e8 di 60 richieste al minuto (solo tramite OAuth2). La risposta a ogni chiamata all&#8217;API di Reddit restituisce i valori delle intestazioni <code>X-Ratelimit-Used<\/code>, <code>X-Ratelimit-Remaining<\/code> e <code>X-Ratelimit-Reset<\/code> con cui potete determinare quando il limite potrebbe essere superato e in che modo<\/li>\n<li><b>Facebook<\/b>: anche Facebook stabilisce dei limiti di richieste basati sulle route. Per esempio, le chiamate effettuate dalle app basate su Facebook sono limitate a 200 * (numero di utenti dell&#8217;app) richieste all&#8217;ora. Potete trovare i dettagli completi <a href=\"https:\/\/developers.facebook.com\/docs\/graph-api\/overview\/rate-limiting\/\" target=\"_blank\" rel=\"noopener noreferrer\">qui<\/a>. Le risposte dell&#8217;API di Facebook conterranno un&#8217;intestazione <code>X-App-Usage<\/code> o <code>X-Ad-Account-Usage<\/code> che vi aiuta a capire quando il vostro utilizzo sar\u00e0 limitato.<\/li>\n<\/ul>\n\n<h2>Riepilogo<\/h2>\n<p>Quando si creano delle API, \u00e8 fondamentale garantire un controllo ottimale del traffico. Se non tenete sotto controllo la gestione del traffico, vi ritroverete presto con un&#8217;API sovraccarica e non funzionale. Al contrario, quando lavorate con un&#8217;API a velocit\u00e0 limitata, \u00e8 importante capire come funziona la limitazione delle richieste e come dovete usare l&#8217;API per garantire la massima disponibilit\u00e0 e utilizzo.<\/p>\n<p>In questa guida avete imparato a conoscere la limitazione delle richieste delle API, i motivi per cui \u00e8 necessaria, come pu\u00f2 essere implementata e alcune best practice da tenere a mente quando si lavora con i limiti di richieste delle API.<\/p>\n<p>Scoprite l&#8217;<a href=\"https:\/\/sevalla.com\/application-hosting\/\">Hosting di Applicazioni<\/a> di Kinsta e avviate il vostro prossimo progetto <a href=\"https:\/\/kinsta.com\/it\/blog\/node-js-20\/\">Node.js<\/a> oggi stesso!<\/p>\n<p><i>State lavorando con un&#8217;API in rate limiting? Oppure avete implementato la limitazione delle richieste nella vostra API? Fatecelo sapere nei commenti qui sotto!<\/i><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Le API sono un ottimo modo per le applicazioni software di comunicare tra loro, perch\u00e9 permettono alle applicazioni software di interagire e condividere risorse o privilegi. &#8230;<\/p>\n","protected":false},"author":199,"featured_media":70715,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[26232],"class_list":["post-70714","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-api"],"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>Rate Limiting delle API: la Guida Definitiva- Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Scopri come ottimizzare le prestazioni, migliorare la sicurezza e controllare l&#039;uso delle API. Sfrutta la potenza del Rate Limiting per le API con questa guida.\" \/>\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\/api-rate-limiting\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Limitazione delle Richieste API (Rate Limiting): la Guida Definitiva\" \/>\n<meta property=\"og:description\" content=\"Scopri come ottimizzare le prestazioni, migliorare la sicurezza e controllare l&#039;uso delle API. Sfrutta la potenza del Rate Limiting per le API con questa guida.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/it\/blog\/api-rate-limiting\/\" \/>\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-06-27T07:05:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-10-01T19:43:17+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/06\/api-rate-limit.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Jeremy Holcombe\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Scopri come ottimizzare le prestazioni, migliorare la sicurezza e controllare l&#039;uso delle API. Sfrutta la potenza del Rate Limiting per le API con questa guida.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/06\/api-rate-limit.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=\"Jeremy Holcombe\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"23 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/api-rate-limiting\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/api-rate-limiting\/\"},\"author\":{\"name\":\"Jeremy Holcombe\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\"},\"headline\":\"Limitazione delle Richieste API (Rate Limiting): la Guida Definitiva\",\"datePublished\":\"2023-06-27T07:05:00+00:00\",\"dateModified\":\"2025-10-01T19:43:17+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/api-rate-limiting\/\"},\"wordCount\":4417,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/api-rate-limiting\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/06\/api-rate-limit.jpg\",\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/api-rate-limiting\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/api-rate-limiting\/\",\"url\":\"https:\/\/kinsta.com\/it\/blog\/api-rate-limiting\/\",\"name\":\"Rate Limiting delle API: la Guida Definitiva- Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/api-rate-limiting\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/api-rate-limiting\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/06\/api-rate-limit.jpg\",\"datePublished\":\"2023-06-27T07:05:00+00:00\",\"dateModified\":\"2025-10-01T19:43:17+00:00\",\"description\":\"Scopri come ottimizzare le prestazioni, migliorare la sicurezza e controllare l'uso delle API. Sfrutta la potenza del Rate Limiting per le API con questa guida.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/api-rate-limiting\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/api-rate-limiting\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/api-rate-limiting\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/06\/api-rate-limit.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/06\/api-rate-limit.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/api-rate-limiting\/#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\":\"Limitazione delle Richieste API (Rate Limiting): la Guida Definitiva\"}]},{\"@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\/4eee42881d7b5a73ebb4f58dd5223b21\",\"name\":\"Jeremy Holcombe\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"caption\":\"Jeremy Holcombe\"},\"description\":\"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/jeremyholcombe\/\"],\"url\":\"https:\/\/kinsta.com\/it\/blog\/author\/jeremyholcombe\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Rate Limiting delle API: la Guida Definitiva- Kinsta\u00ae","description":"Scopri come ottimizzare le prestazioni, migliorare la sicurezza e controllare l'uso delle API. Sfrutta la potenza del Rate Limiting per le API con questa guida.","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\/api-rate-limiting\/","og_locale":"it_IT","og_type":"article","og_title":"Limitazione delle Richieste API (Rate Limiting): la Guida Definitiva","og_description":"Scopri come ottimizzare le prestazioni, migliorare la sicurezza e controllare l'uso delle API. Sfrutta la potenza del Rate Limiting per le API con questa guida.","og_url":"https:\/\/kinsta.com\/it\/blog\/api-rate-limiting\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstaitalia\/","article_published_time":"2023-06-27T07:05:00+00:00","article_modified_time":"2025-10-01T19:43:17+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/06\/api-rate-limit.jpg","type":"image\/jpeg"}],"author":"Jeremy Holcombe","twitter_card":"summary_large_image","twitter_description":"Scopri come ottimizzare le prestazioni, migliorare la sicurezza e controllare l'uso delle API. Sfrutta la potenza del Rate Limiting per le API con questa guida.","twitter_image":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/06\/api-rate-limit.jpg","twitter_creator":"@Kinsta_IT","twitter_site":"@Kinsta_IT","twitter_misc":{"Scritto da":"Jeremy Holcombe","Tempo di lettura stimato":"23 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/it\/blog\/api-rate-limiting\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/blog\/api-rate-limiting\/"},"author":{"name":"Jeremy Holcombe","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21"},"headline":"Limitazione delle Richieste API (Rate Limiting): la Guida Definitiva","datePublished":"2023-06-27T07:05:00+00:00","dateModified":"2025-10-01T19:43:17+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/api-rate-limiting\/"},"wordCount":4417,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/api-rate-limiting\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/06\/api-rate-limit.jpg","inLanguage":"it-IT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/it\/blog\/api-rate-limiting\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/it\/blog\/api-rate-limiting\/","url":"https:\/\/kinsta.com\/it\/blog\/api-rate-limiting\/","name":"Rate Limiting delle API: la Guida Definitiva- Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/api-rate-limiting\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/api-rate-limiting\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/06\/api-rate-limit.jpg","datePublished":"2023-06-27T07:05:00+00:00","dateModified":"2025-10-01T19:43:17+00:00","description":"Scopri come ottimizzare le prestazioni, migliorare la sicurezza e controllare l'uso delle API. Sfrutta la potenza del Rate Limiting per le API con questa guida.","breadcrumb":{"@id":"https:\/\/kinsta.com\/it\/blog\/api-rate-limiting\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/it\/blog\/api-rate-limiting\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/blog\/api-rate-limiting\/#primaryimage","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/06\/api-rate-limit.jpg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/06\/api-rate-limit.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/it\/blog\/api-rate-limiting\/#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":"Limitazione delle Richieste API (Rate Limiting): la Guida Definitiva"}]},{"@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\/4eee42881d7b5a73ebb4f58dd5223b21","name":"Jeremy Holcombe","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","caption":"Jeremy Holcombe"},"description":"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.","sameAs":["https:\/\/www.linkedin.com\/in\/jeremyholcombe\/"],"url":"https:\/\/kinsta.com\/it\/blog\/author\/jeremyholcombe\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/70714","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\/199"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/comments?post=70714"}],"version-history":[{"count":15,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/70714\/revisions"}],"predecessor-version":[{"id":70881,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/70714\/revisions\/70881"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/70714\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/70714\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/70714\/translations\/pt"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/70714\/translations\/de"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/70714\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/70714\/translations\/es"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/70714\/translations\/jp"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/70714\/translations\/fr"},{"href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/70714\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media\/70715"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media?parent=70714"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/tags?post=70714"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/topic?post=70714"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}