

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# HTTP インターセプター
<a name="interceptors"></a>

インターセプターを使用して、API リクエストおよびレスポンスの実行フローにフックを挿入できます。インターセプターは、SDK がユーザー定義のコードを呼び出して、リクエスト/レスポンスのライフサイクルに処理を挿入できるようにする、柔軟な仕組みです。これにより、進行中のリクエストの変更、リクエスト処理のデバッグ、例外の確認などを行うことができます。

次の例は、再試行ループを入力する前にすべての送信リクエストにヘッダーを追加するシンプルなインターセプターを示しています。

```
class AddHeader(
    private val key: String,
    private val value: String
) : HttpInterceptor {
    override suspend fun modifyBeforeRetryLoop(context: ProtocolRequestInterceptorContext<Any, HttpRequest>): HttpRequest {
        val httpReqBuilder = context.protocolRequest.toBuilder()
        httpReqBuilder.headers[key] = value
        return httpReqBuilder.build()
    }
}
```

詳細と使用可能な傍受フックについては、[「インターセプターインターフェイス](https://docs.aws.amazon.com/smithy-kotlin/api/latest/smithy-client/aws.smithy.kotlin.runtime.client/-interceptor/index.html)」を参照してください。

## インターセプターの登録
<a name="interceptor-registration"></a>

インターセプターは、サービスクライアントを構築するとき、または特定の一連のオペレーションの設定を上書きするときに登録します。

### すべてのサービスクライアントオペレーションのインターセプター
<a name="interceptor-all-ops"></a>

次のコードは、ビルダーのインターセプタープロパティに`AddHeader`インスタンスを追加します。この追加により、再試行ループを入力する前に、すべてのオペレーションに `x-foo-version`ヘッダーが追加されます。

```
val s3 = S3Client.fromEnvironment {
    interceptors += AddHeader("x-foo-version", "1.0")
}

// All service operations invoked using 's3' will have the header appended.
s3.listBuckets { ... }
s3.listObjectsV2 { ... }
```

### 特定のオペレーションのみのインターセプター
<a name="interceptor-specific-ops"></a>

`withConfig` 拡張機能を使用すると、任意の[サービスクライアントの 1 つ以上のオペレーションのサービスクライアント設定を上書き](override-client-config.md)できます。この機能を使用すると、オペレーションのサブセットに追加のインターセプターを登録できます。

次の の例では、 `use`拡張機能内のオペレーションの`s3`インスタンスの設定を上書きします。で呼び出されるオペレーション`s3Scoped`には、 ヘッダー`x-foo-version`と `x-bar-version`ヘッダーの両方が含まれます。

```
// 's3' instance created in the previous code snippet.
s3.withConfig {
    interceptors += AddHeader("x-bar-version", "3.7")
}.use { s3Scoped ->
    // All service operations invoked using 's3Scoped' trigger interceptors
    // that were registered when the client was created and any added in the
    // withConfig { ... } extension.
}
```