Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
На первый взгляд
Цель: Проверка того, как ваше приложение обрабатывает ограничение API для любого API
Время: 15 минут
Подключаемые модули:GenericRandomErrorPlugin, RetryAfterPlugin
Предварительные требования:настройка прокси-сервера разработки
Ограничение скорости при тестировании сложно, так как это происходит редко, только если сервер, на котором размещен API, перегружен. Используя прокси-сервер разработки, вы можете имитировать ограничение скорости на любом API и проверить его правильную обработку приложением.
Чтобы имитировать ограничение скорости в любом API, используйте GenericRandomErrorPlugin. Если используемый Retry-After API возвращает заголовок, используйте RetryAfterPlugin , чтобы убедиться, что приложение отключается, как показано в API.
Симуляция ограничения скорости на любом API
Чтобы начать, включите GenericRandomErrorPlugin в файле конфигурации Dev Proxy.
Файл: devproxyrc.json
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.3.0/rc.schema.json",
"plugins": [
{
"name": "GenericRandomErrorPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
"configSection": "errorsContosoApi",
"urlsToWatch": [
"https://api.contoso.com/*"
]
}
]
}
Затем настройте подключаемый модуль для использования файла, содержащего ошибки, которые нужно имитировать.
Файл: devproxyrc.json (с конфигурацией errorsFile)
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.3.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/v2.3.0/genericrandomerrorplugin.schema.json",
"errorsFile": "errors-contoso-api.json"
}
}
В файле ошибок определите ответ регулирования, чтобы он соответствовал фактическому ответу регулирования API:
Файл: errors-contoso-api.json
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.3.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"
}
}
]
}
]
}
Запустите Dev Proxy с вашим файлом конфигурации и протестируйте приложение, чтобы узнать, как оно обрабатывает ограничение.
Проверка правильности резервного копирования с заголовком Retry-After
Многие API используют заголовок ответа Retry-After, чтобы указать приложению приостановить работу на определенное время. При имитации ответов на регулирование с помощью Dev Proxy, можно либо настроить заголовок Retry-After на статическое значение, либо использовать динамическое значение, которое проверяет, ожидает ли ваше приложение по инструкции, прежде чем снова вызвать API.
Чтобы настроить Retry-After заголовок на статическое значение, добавьте заголовок в ответ регулирования:
Файл: errors-contoso-api.json (со статическим значением Retry-After)
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.3.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"
}
}
]
}
]
}
В этом примере заголовок Retry-After установлен на 60 секунд. Когда вы настраиваете заголовок на статическое значение, прокси-сервер разработки не контролирует, ждет ли приложение перед повторным вызовом API.
Чтобы проверить правильность ожидания приложения перед повторным вызовом API, измените значение @dynamicзаголовка на:
Файл: errors-contoso-api.json (с динамическим Retry-After)
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.3.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"
}
}
]
}
]
}
Кроме того, расширьте конфигурацию прокси-сервера разработки с помощью RetryAfterPlugin.
Файл: devproxyrc.json (в комплекте с RetryAfterPlugin)
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.3.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/v2.3.0/genericrandomerrorplugin.schema.json",
"errorsFile": "errors-contoso-api.json"
}
}
Внимание
Добавьте RetryAfterPlugin перед GenericRandomErrorPlugin в вашем файле конфигурации. Если вы добавите его после, запрос будет отклонён GenericRandomErrorPlugin до того, как RetryAfterPlugin получит возможность обработать его.
Этот плагин отслеживает ответы с ограничениями и принудительно отклоняет запросы, отправленные на API, которые все еще ограничены.
Дополнительные сведения
См. также
- GenericRandomErrorPlugin — полная ссылка
- RetryAfterPlugin — проверка поведения повторных попыток
- Имитация регулирования в API Microsoft 365 — специфика Microsoft 365
- Глоссарий — терминология прокси для разработки