Testen of mijn toepassing bandbreedtebeperking goed verwerkt
Het testen van snelheidsbeperking is moeilijk omdat dit zelden gebeurt, alleen wanneer de server die de API host zwaar wordt belast. Met behulp van de dev-proxy kunt u vertraging voor elke API simuleren en controleren of uw toepassing dit correct afhandelt.
Gebruik de GenericRandomErrorPlugin om throttling op een API te simuleren. Als de API die u gebruikt, een Retry-After
header retourneert, gebruikt u RetryAfterPlugin om te controleren of uw app wordt teruggezet volgens de instructies van de API.
Beperking simuleren op elke API
Als u wilt beginnen, schakelt u het GenericRandomErrorPlugin
in uw Dev Proxy-configuratiebestand in.
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v0.24.0/rc.schema.json",
"plugins": [
{
"name": "GenericRandomErrorPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/dev-proxy-plugins.dll",
"configSection": "errorsContosoApi",
"urlsToWatch": [
"https://api.contoso.com/*"
]
}
]
}
Configureer vervolgens de invoegtoepassing voor het gebruik van een bestand dat de fouten bevat die u wilt simuleren.
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v0.24.0/rc.schema.json",
"plugins": [
{
"name": "GenericRandomErrorPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/dev-proxy-plugins.dll",
"configSection": "errorsContosoApi",
"urlsToWatch": [
"https://api.contoso.com/*"
]
}
],
"errorsContosoApi": {
"errorsFile": "errors-contoso-api.json"
}
}
Definieer in het foutenbestand de beperkingsreactie zodat deze overeenkomt met de werkelijke beperkingsreactie van uw API.
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v0.24.0/genericrandomerrorplugin.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"
}
}
]
}
]
}
Start Dev Proxy met je configuratiebestand en test je app om te zien hoe het omgaan met bandbreedtebeperking wordt verwerkt.
De juiste terugval testen met de Retry-After
koptekst
Veel API's gebruiken de Retry-After
antwoordheader om de app te instrueren om gedurende een bepaalde tijd een back-off uit te voeren. Wanneer u throttle-reacties simuleert met behulp van Dev Proxy, kunt u de Retry-After
-header configureren op een statische waarde of een dynamische waarde gebruiken die test of uw app wacht zoals geïnstrueerd voordat de API opnieuw wordt aangeroepen.
Als u de Retry-After
header wilt configureren voor een statische waarde, voegt u de header toe aan uw limiteringsreactie.
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v0.24.0/genericrandomerrorplugin.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 dit voorbeeld is de Retry-After
header ingesteld op 60 seconden. Wanneer u de header instelt op een statische waarde, controleert Dev Proxy niet of uw app wacht voordat de API opnieuw wordt aangeroepen.
Als u wilt testen of uw app correct wacht voordat u de API opnieuw aanroept, wijzigt u de waarde van de header in @dynamic
:
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v0.24.0/genericrandomerrorplugin.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"
}
}
]
}
]
}
Breid bovendien uw Dev Proxy-configuratie uit met de RetryAfterPlugin
.
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v0.24.0/rc.schema.json",
"plugins": [
{
"name": "RetryAfterPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/dev-proxy-plugins.dll",
"urlsToWatch": [
"https://api.contoso.com/*"
]
},
{
"name": "GenericRandomErrorPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/dev-proxy-plugins.dll",
"configSection": "errorsContosoApi",
"urlsToWatch": [
"https://api.contoso.com/*"
]
}
],
"errorsContosoApi": {
"errorsFile": "errors-contoso-api.json"
}
}
Let op
Voeg de RetryAfterPlugin
toe voor de GenericRandomErrorPlugin
in uw configuratiebestand. Als u deze later toevoegt, wordt de aanvraag mislukt door de GenericRandomErrorPlugin
voordat de RetryAfterPlugin
aanvraag kan worden verwerkt.
Deze invoegtoepassing houdt de beperkingsreacties bij en laat geforceerd aanvragen falen die worden ingediend bij API's die nog steeds worden beperkt.