次の方法で共有


アプリケーションが調整を適切に処理することをテストする

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"
  }
}

注意事項

構成ファイルに の前に をRetryAfterPluginGenericRandomErrorPlugin追加します。 後に追加した場合、要求は によって GenericRandomErrorPlugin 失敗します。その前に、 RetryAfterPlugin によって要求が処理されます。

このプラグインは調整応答を追跡し、引き続き調整されている API に対して発行された要求を強制的に失敗します。

詳細情報