Partager via


Tester que mon application gère correctement la limitation

Le test de limitation est difficile, car il se produit rarement, uniquement lorsque le serveur hébergeant l’API est sous une charge importante. À l’aide du proxy de développement, vous pouvez simuler la limitation sur n’importe quelle API et vérifier si votre application la gère correctement.

Pour simuler la limitation sur n’importe quelle API, utilisez GenericRandomErrorPlugin. Si l’API que vous utilisez, retourne un Retry-After en-tête, utilisez RetryAfterPlugin pour vérifier que votre application est désactivée comme indiqué par l’API.

Simuler la limitation sur n’importe quelle API

Pour commencer, activez le GenericRandomErrorPlugin fichier de configuration de votre proxy de développement.

{
  "$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/*"
      ]
    }
  ]
}

Ensuite, configurez le plug-in pour utiliser un fichier qui contient les erreurs que vous souhaitez simuler.

{
  "$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"
  }
}

Dans le fichier d’erreurs, définissez la réponse de limitation afin qu’elle corresponde à la réponse de limitation réelle de votre 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"
          }
        }
      ]
    }
  ]
}

Démarrez le proxy de développement avec votre fichier de configuration et testez votre application pour voir comment elle gère la limitation.

Tester la sauvegarde correcte avec l’en-tête Retry-After

De nombreuses API utilisent l’en-tête Retry-After de réponse pour indiquer à l’application de se retirer pendant une durée spécifique. Lors de la simulation de réponses de limitation à l’aide du proxy de développement, vous pouvez configurer l’en-tête Retry-After sur une valeur statique ou utiliser une valeur dynamique qui teste si votre application attend comme indiqué avant d’appeler à nouveau l’API.

Pour configurer l’en-tête Retry-After sur une valeur statique, ajoutez l’en-tête à votre réponse de limitation :

{
  "$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"
          }
        }
      ]
    }
  ]
}

Dans cet exemple, l’en-tête Retry-After est défini sur 60 secondes. Lorsque vous configurez l’en-tête sur une valeur statique, le proxy de développement ne contrôle pas si votre application attend avant d’appeler à nouveau l’API.

Pour tester si votre application attend correctement avant d’appeler à nouveau l’API, remplacez la valeur de l’en-tête par @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"
          }
        }
      ]
    }
  ]
}

En outre, étendez la configuration de votre proxy de développement avec le RetryAfterPluginfichier .

{
  "$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"
  }
}

Attention

Ajoutez le RetryAfterPlugin GenericRandomErrorPlugin fichier de configuration avant. Si vous l’ajoutez après, la demande échoue avant GenericRandomErrorPlugin que la RetryAfterPlugin demande ne puisse la gérer.

Ce plug-in effectue le suivi des réponses de limitation et échoue avec force les demandes émises aux API qui sont toujours limitées.

Plus d’informations