Проверка правильности регулирования в приложении

Тестирование регулирования затруднено, так как оно происходит редко, только если сервер, на котором размещен API, находится под большой нагрузкой. С помощью прокси-сервера разработчика можно имитировать регулирование в любом API и проверка, правильно ли приложение обрабатывает его.

Чтобы имитировать регулирование в любом API, используйте GenericRandomErrorPlugin. Если используемый API возвращает Retry-After заголовок, используйте RetryAfterPlugin , чтобы убедиться, что приложение отключается, как указано в API.

Имитация регулирования в любом API

Для начала включите в GenericRandomErrorPlugin файле конфигурации прокси-сервера разработки.

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

Затем настройте подключаемый модуль для использования файла, содержащего ошибки, которые вы хотите имитировать.

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

В файле ошибок определите ответ регулирования, чтобы он соответствовал фактическому ответу на регулирование API:

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

Запустите Dev Proxy с файлом конфигурации и протестируйте приложение, чтобы узнать, как оно обрабатывает регулирование.

Проверка правильности отката с помощью заголовка Retry-After

Многие API используют Retry-After заголовок ответа, чтобы указать приложению отступить в течение определенного периода времени. При моделировании ответов регулирования с помощью прокси-сервера разработчика можно настроить Retry-After заголовок на статическое значение или использовать динамическое значение, которое проверяет, ожидает ли приложение, как указано, перед повторным вызовом API.

Чтобы настроить заголовок Retry-After для статического значения, добавьте заголовок в ответ регулирования:

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

В этом примере заголовок Retry-After имеет значение 60 секунд. При настройке статического значения заголовка прокси-сервер разработчика не контролирует ожидание приложения перед повторным вызовом API.

Чтобы проверить, правильно ли приложение ожидает перед повторным вызовом API, измените значение заголовка на @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"
          }
        }
      ]
    }
  ]
}

Кроме того, расширьте конфигурацию прокси-сервера разработки с помощью 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"
  }
}

Внимание!

Добавьте перед RetryAfterPlugin в GenericRandomErrorPlugin файл конфигурации. Если добавить его после, запрос завершится ошибкой GenericRandomErrorPlugin до того RetryAfterPlugin , как объект сможет его обработать.

Этот подключаемый модуль отслеживает ответы регулирования и принудительно завершает запросы, выданные API, которые по-прежнему регулируются.

Дополнительные сведения