アプリケーションがスロットルを適切に処理することをテストする
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"
}
}
]
}
]
}
構成ファイルで開発プロキシを起動し、アプリをテストして、調整がどのように処理されるかを確認します。
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 を再度呼び出す前に待機しているかどうかを Dev Proxy が制御しません。
アプリが 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"
}
}
注意事項
構成ファイルのGenericRandomErrorPlugin
の前にRetryAfterPlugin
を追加します。 後で追加した場合、RetryAfterPlugin
が処理する前にGenericRandomErrorPlugin
によって要求が失敗します。
このプラグインは、調整応答を追跡し、引き続き調整されている API に対して発行された要求を強制的に失敗させます。
詳細
Dev Proxy