Comprueba que mi aplicación gestiona correctamente la limitación de velocidad

Tip

¿No conoce la limitación de velocidad? Aprenda qué es la limitación de velocidad y cómo gestionarla.

De un vistazo
Objetivo: Prueba cómo tu aplicación maneja la limitación de cualquier API
Tiempo: 15 minutos
Plugins:GenericRandomErrorPlugin, RetryAfterPlugin
Requisitos previos:Configuración del proxy de desarrollo

Es difícil probar la limitación de tasa porque ocurre rara vez, solo cuando el servidor que aloja la API está sometido a una carga elevada. Con Dev Proxy, puede simular la limitación de velocidad en cualquier API y comprobar si la aplicación la gestiona correctamente.

Para simular la limitación de velocidad en cualquier API, use el complemento GenericRandomErrorPlugin. Si la API que usa, devuelve un Retry-After encabezado, use RetryAfterPlugin para comprobar que la aplicación vuelve a estar desactivada según lo indicado por la API.

Simular la limitación de velocidad en cualquier API

Para empezar, habilite el GenericRandomErrorPlugin en el archivo de configuración de Dev Proxy.

Archivo: 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/*"
      ]
    }
  ]
}

A continuación, configure el complemento para que use un archivo que contenga los errores que desea simular.

Archivo: devproxyrc.json (con la configuración de errorsFile)

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

En el archivo de errores, defina la respuesta de limitación para que coincida con la respuesta de limitación real de la API:

Archivo: 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"
          }
        }
      ]
    }
  ]
}

Inicie Dev Proxy con su archivo de configuración y pruebe su aplicación para ver cómo gestiona la limitación de velocidad.

Probar el retroceso correcto con la Retry-After cabecera

Muchas API usan el Retry-After encabezado de respuesta para indicar a la aplicación que se vuelva a desactivar durante un período de tiempo específico. Al simular respuestas de limitación de velocidad con Dev Proxy, puedes configurar el encabezado Retry-After con un valor estático o usar un valor dinámico que compruebe si la aplicación espera el tiempo indicado antes de volver a llamar a la API.

Para configurar la cabecera Retry-After con un valor estático, añada la cabecera a su respuesta de limitación de velocidad:

Archivo: errors-contoso-api.json (con Retry-After estático)

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

En este ejemplo, el Retry-After encabezado se establece en 60 segundos. Cuando configuras el encabezado con un valor estático, Dev Proxy no controla si tu aplicación espera antes de volver a llamar a la API.

Para probar si la aplicación está esperando correctamente antes de volver a llamar a la API, cambie el valor del encabezado a @dynamic:

Archivo: errors-contoso-api.json (con Retry-After dinámico)

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

Además, amplíe la configuración del proxy de desarrollo con RetryAfterPlugin.

Archivo: devproxyrc.json (completo con 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"
  }
}

Precaución

Añada el RetryAfterPlugin antes del GenericRandomErrorPlugin en su archivo de configuración. Si lo añade después, GenericRandomErrorPlugin hará que la solicitud falle antes de que RetryAfterPlugin tenga la oportunidad de procesarla.

Este complemento realiza un seguimiento de las respuestas de limitación y produce un error forzado de las solicitudes emitidas a las API que todavía están limitadas.

Más información

Consulte también