Simulare le risposte dell'API Rate-Limit
Le intestazioni Rate-Limit vengono usate nelle risposte HTTP per limitare il numero di richieste che un client può effettuare entro un determinato periodo di tempo.
Il server invia queste intestazioni in risposta alla richiesta di un client per indicare il numero di richieste consentite e il numero di richieste che rimangono prima del raggiungimento del limite.
Il RateLimit-Limit
campo intestazione della risposta indica la quota richiesta associata al client nell'intervallo di tempo corrente. Se il client supera tale limite, potrebbe non essere servito.
Supporto del limite di velocità personalizzato
Quando si supera il limite di velocità, alcune API usano comportamenti personalizzati, ad esempio la restituzione di un 403 Forbidden
codice di stato con un messaggio di errore personalizzato. Dev Proxy consente di simulare questi comportamenti personalizzati usando il Custom
valore per la whenLimitExceeded
proprietà .
L'esempio seguente illustra come configurare la modalità di configurazione di RateLimitingPlugin nel file devproxyrc per simulare i limiti di frequenza per l'API GitHub.
{
"rateLimiting": {
"headerLimit": "X-RateLimit-Limit",
"headerRemaining": "X-RateLimit-Remaining",
"headerReset": "X-RateLimit-Reset",
"costPerRequest": 1,
"resetTimeWindowSeconds": 3600,
"warningThresholdPercent": 0,
"rateLimit": 60,
"resetFormat": "UtcEpochSeconds",
"whenLimitExceeded": "Custom",
"customResponseFile": "github-rate-limit-exceeded.json"
}
}
customResponseFile
Contiene la risposta restituita dal proxy quando l'app ha raggiunto il limite di velocità.
{
"statusCode": 403,
"headers": [
{
"name": "Content-Type",
"value": "application/json; charset=utf-8"
}
],
"body": {
"message": "You have exceeded a secondary rate limit and have been temporarily blocked from content creation. Please retry your request again later.",
"documentation_url": "https://docs.github.com/rest/overview/resources-in-the-rest-api#secondary-rate-limits"
}
}
Passaggi successivi
Ulteriori informazioni su RateLimitingPlugin
.