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

На первый взгляд
Цель: Проверка того, как приложение обрабатывает регулирование API Microsoft 365
Время: 10 минут
Подключаемые модули:GraphRandomErrorPlugin, RetryAfterPlugin
Предварительные требования:настройка прокси-сервера разработки

Как правило, тестирование ограничения сложно, так как это происходит редко, когда серверы Microsoft 365 находятся под высокой нагрузкой. Используя прокси-сервер для разработки, вы можете моделировать ответы с задержками и проверять, правильно ли ваше приложение обрабатывает их.

Чтобы имитировать регулирование в API Microsoft 365, используйте GraphRandomErrorPlugin и RetryAfterPlugin. Возвращает GraphRandomErrorPlugin ответы регулирования для API Microsoft 365. Проверка RetryAfterPlugin подтверждает, что ваше приложение снижает активность, как это предусмотрено API.

Чтобы начать, включите GraphRandomErrorPlugin и RetryAfterPlugin в файле конфигурации прокси-сервера разработки.

Файл:devproxyrc.json

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.0.0/rc.schema.json",
  "plugins": [
    {
      "name": "RetryAfterPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll"
    },
    {
      "name": "GraphRandomErrorPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
      "configSection": "graphRandomErrorPlugin"
    }
  ],
  "urlsToWatch": [
    "https://graph.microsoft.com/v1.0/*",
    "https://graph.microsoft.com/beta/*",
    "https://graph.microsoft.us/v1.0/*",
    "https://graph.microsoft.us/beta/*",
    "https://dod-graph.microsoft.us/v1.0/*",
    "https://dod-graph.microsoft.us/beta/*",
    "https://microsoftgraph.chinacloudapi.cn/v1.0/*",
    "https://microsoftgraph.chinacloudapi.cn/beta/*",
    "!https://*.sharepoint.*/*_api/web/GetClientSideComponents",
    "https://*.sharepoint.*/*_api/*",
    "https://*.sharepoint.*/*_vti_bin/*",
    "https://*.sharepoint-df.*/*_api/*",
    "https://*.sharepoint-df.*/*_vti_bin/*"
  ]
}

Внимание

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

Затем настройте GraphRandomErrorPlugin для имитации ошибок ограничения скорости.

Файл:devproxyrc.json (полная конфигурация)

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.0.0/rc.schema.json",
  "plugins": [
    {
      "name": "RetryAfterPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll"
    },
    {
      "name": "GraphRandomErrorPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
      "configSection": "graphRandomErrorPlugin"
    }
  ],
  "urlsToWatch": [
    "https://graph.microsoft.com/v1.0/*",
    "https://graph.microsoft.com/beta/*",
    "https://graph.microsoft.us/v1.0/*",
    "https://graph.microsoft.us/beta/*",
    "https://dod-graph.microsoft.us/v1.0/*",
    "https://dod-graph.microsoft.us/beta/*",
    "https://microsoftgraph.chinacloudapi.cn/v1.0/*",
    "https://microsoftgraph.chinacloudapi.cn/beta/*",
    "!https://*.sharepoint.*/*_api/web/GetClientSideComponents",
    "https://*.sharepoint.*/*_api/*",
    "https://*.sharepoint.*/*_vti_bin/*",
    "https://*.sharepoint-df.*/*_api/*",
    "https://*.sharepoint-df.*/*_vti_bin/*"
  ],
  "graphRandomErrorPlugin": {
    "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.0.0/graphrandomerrorplugin.schema.json",
    "allowedErrors": [ 429 ]
  }
}

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

Если приложение отключается при регулировании, но не ожидает времени, указанного в запросах, отображается сообщение, аналогичное Calling https://graph.microsoft.com/v1.0/endpoint again before waiting for the Retry-After period. Request will be throttled.

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

См. также