Проверка правильности регулирования приложения
Регулирование тестирования сложно, так как это происходит редко, только если сервер, на котором размещен API, находится под тяжелой нагрузкой. Используя прокси-сервер разработки, вы можете имитировать регулирование в любом API и проверить правильность обработки приложения.
Чтобы имитировать регулирование в любом API, используйте genericRandomErrorPlugin. Если используемый Retry-After
API возвращает заголовок, используйте RetryAfterPlugin , чтобы убедиться, что приложение отключается, как показано в API.
Имитация регулирования в любом API
Чтобы начать, включите GenericRandomErrorPlugin
файл конфигурации прокси-сервера разработки.
{
"$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/*"
]
}
]
}
Затем настройте подключаемый модуль для использования файла, содержащего ошибки, которые нужно имитировать.
{
"$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"
}
}
В файле ошибок определите ответ регулирования, чтобы он соответствовал фактическому ответу регулирования 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"
}
}
]
}
]
}
Запустите прокси-сервер разработки с файлом конфигурации и протестируйте приложение, чтобы узнать, как он обрабатывает регулирование.
Проверка правильности резервного копирования с заголовком Retry-After
Многие API используют Retry-After
заголовок ответа, чтобы указать приложению отключать определенное время. При имитации ответов регулирования с помощью прокси-сервера разработки можно настроить Retry-After
заголовок в статическое значение или использовать динамическое значение, которое проверяет, ожидается ли приложение, как показано перед вызовом API.
Чтобы настроить Retry-After
заголовок на статическое значение, добавьте заголовок в ответ регулирования:
{
"$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"
}
}
]
}
]
}
В этом примере Retry-After
заголовок имеет значение 60 секунд. При настройке заголовка в статическое значение прокси-сервер разработки не контролируется, если приложение ожидает повторного вызова API.
Чтобы проверить правильность ожидания приложения перед повторным вызовом API, измените значение @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"
}
}
]
}
]
}
Кроме того, расширьте конфигурацию прокси-сервера разработки с помощью RetryAfterPlugin
.
{
"$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"
}
}
Внимание
RetryAfterPlugin
Добавьте его перед файлом GenericRandomErrorPlugin
конфигурации. Если вы добавите его после, запрос завершится сбоем GenericRandomErrorPlugin
до того, как RetryAfterPlugin
у него есть шанс обработать его.
Этот подключаемый модуль отслеживает ответы регулирования и принудительно завершает запросы, выданные API, которые по-прежнему регулируются.