Проверка правильности регулирования в приложении
Тестирование регулирования затруднено, так как оно происходит редко, только если сервер, на котором размещен 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, которые по-прежнему регулируются.