Testen, ob meine Anwendung die Drosselung ordnungsgemäß verarbeitet

Tip

Neu beim Drosseln? Erfahren Sie was Throttling ist und wie Sie damit umgehen.

Auf einen Blick
Ziel: Testen, wie Ihre App die API-Drosselung für eine beliebige API behandelt
Zeit: 15 Minuten
Plugins:GenericRandomErrorPlugin, RetryAfterPlugin
Voraussetzungen:Einrichten des Dev-Proxys

Das Testen der Drosselung ist schwierig, da es nur selten dazu kommt, nämlich nur dann, wenn der Server, auf dem die API gehostet wird, stark ausgelastet ist. Mithilfe des Dev-Proxys können Sie die Drosselung für eine beliebige API simulieren und überprüfen, ob die Anwendung sie richtig behandelt.

Verwenden Sie zum Simulieren der Drosselung für eine beliebige API das GenericRandomErrorPlugin. Wenn die von Ihnen verwendete API einen Retry-After-Header zurückgibt, verwenden Sie das RetryAfterPlugin, um zu überprüfen, ob Ihre App wie von der API angewiesen wartet.

Drosselung für jede API simulieren

Aktivieren Sie zunächst die GenericRandomErrorPlugin In ihrer Dev Proxy-Konfigurationsdatei.

Datei: devproxyrc.json

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.1.0/rc.schema.json",
  "plugins": [
    {
      "name": "GenericRandomErrorPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
      "configSection": "errorsContosoApi",
      "urlsToWatch": [
        "https://api.contoso.com/*"
      ]
    }
  ]
}

Konfigurieren Sie als Nächstes das Plug-In, um eine Datei zu verwenden, die die Fehler enthält, die Sie simulieren möchten.

Datei: devproxyrc.json (mit ErrorsFile-Konfiguration)

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.1.0/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.1.0/genericrandomerrorplugin.schema.json",
    "errorsFile": "errors-contoso-api.json"
  }
}

Definieren Sie in der Fehlerdatei die Antwort bei Drosselung so, dass sie der tatsächlichen Antwort bei Drosselung Ihrer API entspricht:

Datei: errors-contoso-api.json

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.1.0/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"
          }
        }
      ]
    }
  ]
}

Starten Sie Dev Proxy mit Ihrer Konfigurationsdatei und testen Sie Ihre App, um zu sehen, wie sie mit Drosselung umgeht.

Testen Sie das korrekte Zurückweichen mit der Kopfzeile Retry-After

Viele APIs verwenden den Retry-After Antwortheader, um die App für einen bestimmten Zeitraum zurückzuschalten. Beim Simulieren von Drosselungsantworten mithilfe von Dev Proxy können Sie entweder den Retry-After Header auf einen statischen Wert konfigurieren oder einen dynamischen Wert verwenden, der testet, wenn Ihre App wie angegeben wartet, bevor Sie die API erneut aufrufen.

Um den Header Retry-After auf einen festen Wert festzulegen, fügen Sie den Header Ihrer Throttling-Antwort hinzu:

Datei: errors-contoso-api.json (mit statischem Retry-After)

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.1.0/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 diesem Beispiel wird die Retry-After Kopfzeile auf 60 Sekunden festgelegt. Wenn Sie den Header auf einen statischen Wert konfigurieren, steuert Dev Proxy nicht, ob Ihre App wartet, bevor Sie die API erneut aufrufen.

Um zu testen, ob Ihre App ordnungsgemäß wartet, bevor Sie die API erneut aufrufen, ändern Sie den Wert des Headers in @dynamic:

Datei: errors-contoso-api.json (mit dynamischem Retry-After)

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.1.0/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"
          }
        }
      ]
    }
  ]
}

Erweitern Sie außerdem Ihre Dev Proxy-Konfiguration mit dem RetryAfterPlugin.

Datei: devproxyrc.json (vollständig mit RetryAfterPlugin)

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.1.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": {
    "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.1.0/genericrandomerrorplugin.schema.json",
    "errorsFile": "errors-contoso-api.json"
  }
}

Achtung

Fügen Sie das RetryAfterPlugin vor dem GenericRandomErrorPlugin in Ihrer Konfigurationsdatei hinzu. Wenn Sie sie erst danach hinzufügen, wird die Anfrage von GenericRandomErrorPlugin abgewiesen, bevor RetryAfterPlugin Gelegenheit hat, sie zu verarbeiten.

Dieses Plug-in erfasst Antworten, die auf eine Drosselung hinweisen, und lässt Anfragen an APIs, für die noch eine Drosselung gilt, gezielt fehlschlagen.

Weitere Informationen

Siehe auch