アプリケーションが調整を適切に処理することをテストする
API をホストするサーバーの負荷が高い場合にのみ、ほとんど発生しないため、調整のテストは困難です。 開発プロキシを使用すると、任意の API で調整をシミュレートし、アプリケーションが正しく処理するかどうかをチェックできます。
任意の API で調整をシミュレートするには、 GenericRandomErrorPlugin を使用します。 使用する API がヘッダーを Retry-After
返す場合は、 RetryAfterPlugin を使用して、API の指示に従ってアプリがバックオフすることを確認します。
任意の API で調整をシミュレートする
開始するには、Dev Proxy 構成ファイルで を 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"
}
}
注意事項
構成ファイルに の前に をRetryAfterPlugin
GenericRandomErrorPlugin
追加します。 後に追加した場合、要求は によって GenericRandomErrorPlugin
失敗します。その前に、 RetryAfterPlugin
によって要求が処理されます。
このプラグインは調整応答を追跡し、引き続き調整されている API に対して発行された要求を強制的に失敗します。
詳細情報
Dev Proxy