Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Tip
Non conosci ancora il throttling? Scopri che cos'è il throttling e come gestirlo.
A colpo d'occhio
Obiettivo: Testare il modo in cui l'app gestisce la limitazione delle API in qualsiasi API
Tempo: 15 minuti
Plugins:GenericRandomErrorPlugin, RetryAfterPlugin
Prerequisiti:Configurare il proxy di sviluppo
Il test del "throttling" è difficile perché si verifica raramente, solo quando il server che ospita l'API è soggetto a un carico elevato. Usando il proxy di sviluppo, è possibile simulare la limitazione delle richieste in qualsiasi API e verificare se l'applicazione la gestisce correttamente.
Per simulare la limitazione del throughput in qualsiasi API, utilizzare GenericRandomErrorPlugin. Se l'API usata, restituisce un'intestazione Retry-After , usare RetryAfterPlugin per verificare che l'app venga disattivata come indicato dall'API.
Simulare la strozzatura su qualsiasi API
Per iniziare, abilitare GenericRandomErrorPlugin nel file di configurazione del proxy di sviluppo.
Nome file: devproxyrc.json
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/rc.schema.json",
"plugins": [
{
"name": "GenericRandomErrorPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
"configSection": "errorsContosoApi",
"urlsToWatch": [
"https://api.contoso.com/*"
]
}
]
}
Configurare quindi il plug-in per usare un file contenente gli errori da simulare.
File: devproxyrc.json (con configurazione degli errorsFile)
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/rc.schema.json",
"plugins": [
{
"name": "GenericRandomErrorPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
"configSection": "errorsContosoApi",
"urlsToWatch": [
"https://api.contoso.com/*"
]
}
],
"errorsContosoApi": {
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/genericrandomerrorplugin.schema.json",
"errorsFile": "errors-contoso-api.json"
}
}
Nel file degli errori, definire la risposta di throttling in modo che corrisponda alla risposta effettiva di throttling dell'API.
File: errors-contoso-api.json
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/genericrandomerrorplugin.errorsfile.schema.json",
"errors": [
{
"request": {
"url": "https://api.contoso.com/*"
},
"responses": [
{
"statusCode": 429,
"headers": [
{
"name": "Content-Type",
"value": "application/json"
}
],
"body": {
"code": "TooManyRequests",
"message": "Too many requests"
}
}
]
}
]
}
Avvia Dev Proxy con il tuo file di configurazione e testa l'app per vedere come gestisce il rallentamento.
Testare il backup corretto con l'intestazione Retry-After
Molte API usano l'intestazione Retry-After della risposta per indicare all'app di eseguire il back-off per un periodo di tempo specifico. Quando si simulano risposte di limitazione usando Dev Proxy, è possibile configurare l'intestazione Retry-After su un valore statico o usare un valore dinamico che verifica se l'app è in attesa come indicato prima di chiamare nuovamente l'API.
Per configurare l'intestazione Retry-After su un valore statico, inserire l'intestazione nella risposta di throttling:
File: errors-contoso-api.json (con Retry-After statico)
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/genericrandomerrorplugin.errorsfile.schema.json",
"errors": [
{
"request": {
"url": "https://api.contoso.com/*"
},
"responses": [
{
"statusCode": 429,
"headers": [
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Retry-After",
"value": "60"
}
],
"body": {
"code": "TooManyRequests",
"message": "Too many requests"
}
}
]
}
]
}
In questo esempio l'intestazione Retry-After è impostata su 60 secondi. Quando si configura l'intestazione su un valore statico, Dev Proxy non controlla se l'app è in attesa prima di chiamare nuovamente l'API.
Per verificare se l'app è in attesa correttamente prima di chiamare nuovamente l'API, modificare il valore dell'intestazione in @dynamic:
File: errors-contoso-api.json (con Retry-After dinamico)
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/genericrandomerrorplugin.errorsfile.schema.json",
"errors": [
{
"request": {
"url": "https://api.contoso.com/*"
},
"responses": [
{
"statusCode": 429,
"headers": [
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Retry-After",
"value": "@dynamic"
}
],
"body": {
"code": "TooManyRequests",
"message": "Too many requests"
}
}
]
}
]
}
Estendi inoltre la configurazione del proxy di sviluppo con RetryAfterPlugin.
File: devproxyrc.json (completo con RetryAfterPlugin)
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/rc.schema.json",
"plugins": [
{
"name": "RetryAfterPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
"urlsToWatch": [
"https://api.contoso.com/*"
]
},
{
"name": "GenericRandomErrorPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
"configSection": "errorsContosoApi",
"urlsToWatch": [
"https://api.contoso.com/*"
]
}
],
"errorsContosoApi": {
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/genericrandomerrorplugin.schema.json",
"errorsFile": "errors-contoso-api.json"
}
}
Attenzione
Aggiungi RetryAfterPlugin prima di GenericRandomErrorPlugin nel file di configurazione. Se lo aggiungi dopo, la richiesta verrà respinta da GenericRandomErrorPlugin prima che RetryAfterPlugin abbia la possibilità di gestirla.
Questo plug-in tiene traccia delle risposte di limitazione e interrompe forzatamente le richieste inviate alle API che sono ancora soggette a limitazione.
Ulteriori informazioni
Vedere anche
- GenericRandomErrorPlugin - Informazioni di riferimento complete
- RetryAfterPlugin - Verificare il comportamento dei tentativi
- Simulare la limitazione delle richieste nelle API di Microsoft 365 - Specifiche di Microsoft 365
- Testare il modo in cui l'app gestisce i limiti di richiesta di OpenAI - Specifica di OpenAI
- Verifica come l'app gestisce i limiti di frequenza delle API GitHub - specifico di GitHub
- Test dei tentativi e dei timeout nelle app .NET - Microsoft.Extensions.Http.Resilience
- Simulare le risposte dell'API Rate-Limit - Test di resilienza correlato
- Usa Dev Proxy in CI/CD - Automatizza i test di resilienza nella pipeline
- Glossario - Terminologia di Dev Proxy