Delen via


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.

Meer informatie