Freigeben über


Testen, dass meine Anwendung die Drosselung ordnungsgemäß behandelt

Das Testen der Drosselung ist schwierig, da sie nur selten auftritt, wenn der Server, auf dem die API gehostet wird, stark belastet wird. 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 " RetryAfterPlugin ", um zu überprüfen, ob Ihre App wie von der API angewiesen zurückgibt.

Simulieren der Drosselung für eine beliebige API

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

{
  "$schema": "https://raw.githubusercontent.com/microsoft/dev-proxy/main/schemas/v0.20.0/rc.schema.json",
  "plugins": [
    {
      "name": "GenericRandomErrorPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/dev-proxy-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.

{
  "$schema": "https://raw.githubusercontent.com/microsoft/dev-proxy/main/schemas/v0.20.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"
  }
}

Definieren Sie in der Fehlerdatei die Drosselungsantwort so, dass sie der tatsächlichen Einschränkungsantwort Ihrer API entspricht:

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

Starten Sie Dev Proxy mit Ihrer Konfigurationsdatei, und testen Sie Ihre App, um zu sehen, wie die Drosselung behandelt wird.

Testen der korrekten Sicherung mit der Retry-After Kopfzeile

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 Retry-After Header auf einen statischen Wert zu konfigurieren, fügen Sie der Einschränkungsantwort den Header hinzu:

{
  "$schema": "https://raw.githubusercontent.com/microsoft/dev-proxy/main/schemas/v0.20.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 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:

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

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

{
  "$schema": "https://raw.githubusercontent.com/microsoft/dev-proxy/main/schemas/v0.20.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"
  }
}

Achtung

Fügen Sie die vor der RetryAfterPlugin GenericRandomErrorPlugin Konfigurationsdatei hinzu. Wenn Sie sie nachher hinzufügen, schlägt die Anforderung fehl, bevor GenericRandomErrorPlugin die RetryAfterPlugin Möglichkeit besteht, sie zu behandeln.

Dieses Plug-In verfolgt die Drosselung von Antworten und schlägt erzwungene Anforderungen fehl, die an APIs ausgegeben wurden, die noch gedrosselt werden.

Weitere Informationen