Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Det är svårt att testa strypning eftersom det sker sällan, bara när servern som hostar API:et är hårt belastad. Med hjälp av Dev Proxy kan du simulera begränsning på alla API:er och kontrollera om programmet hanterar det korrekt.
För att simulera strypning på valfritt API, använd GenericRandomErrorPlugin. Om API:et som du använder returnerar ett Retry-After huvud bör du använda RetryAfterPlugin för att verifiera att appen backar tillbaka enligt anvisningarna i API:et.
Simulera hastighetsbegränsning på vilket som helst API
Börja genom att aktivera GenericRandomErrorPlugin i din Dev Proxy-konfigurationsfil.
{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/rc.schema.json",
  "plugins": [
    {
      "name": "GenericRandomErrorPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
      "configSection": "errorsContosoApi",
      "urlsToWatch": [
        "https://api.contoso.com/*"
      ]
    }
  ]
}
Konfigurera sedan plugin-programmet så att det använder en fil som innehåller de fel som du vill simulera.
{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/rc.schema.json",
  "plugins": [
    {
      "name": "GenericRandomErrorPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
      "configSection": "errorsContosoApi",
      "urlsToWatch": [
        "https://api.contoso.com/*"
      ]
    }
  ],
  "errorsContosoApi": {
    "errorsFile": "errors-contoso-api.json"
  }
}
I felfilen definierar du begränsningssvaret så att det matchar det faktiska begränsningssvaret för ditt API:
{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.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"
          }
        }
      ]
    }
  ]
}
Starta Dev Proxy med din konfigurationsfil och testa appen för att se hur den hanterar begränsning av bandbredd.
Testa korrekt reträtt med Retry-After rubrik
Många API:er använder svarshuvudet Retry-After för att instruera appen att backa under en viss tid. När du simulerar begränsningssvar genom att använda Dev Proxy kan du antingen konfigurera Retry-After headern till ett statiskt värde, eller använda ett dynamiskt värde som testar om appen verkligen väntar som instruerat innan den anropar API:et igen.
Om du vill konfigurera Retry-After huvudet till ett statiskt värde lägger du till huvudet i ditt begränsningssvar:
{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.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"
          }
        }
      ]
    }
  ]
}
I det här exemplet är rubriken inställd på Retry-After 60 sekunder. När du ställer in huvudvärdet till ett statiskt värde, kontrollerar inte Dev Proxy om din app väntar innan den anropar API:et igen.
För att testa om appen väntar korrekt innan den anropar API:et igen, ändrar du headerns värde till @dynamic:
{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.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"
          }
        }
      ]
    }
  ]
}
Utöka dessutom din Dev Proxy-konfiguration med RetryAfterPlugin.
{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/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": {
    "errorsFile": "errors-contoso-api.json"
  }
}
Varning
Lägg till RetryAfterPlugin före GenericRandomErrorPlugin i din konfigurationsfil. Om du lägger till det efteråt, kommer begäran att misslyckas av GenericRandomErrorPlugin innan RetryAfterPlugin har en chans att hantera det.
Det här plugin-programmet håller reda på begränsningssvar och misslyckas med att skicka begäranden som utfärdas till API:er som fortfarande är begränsade.