翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
HTTP インターセプター
インターセプターを使用して、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()
}
}
詳細と使用可能な傍受フックについては、「インターセプターインターフェイス
インターセプター登録
インターセプターは、サービスクライアントを構築するとき、または特定の一連のオペレーションの設定を上書きするときに登録します。
すべてのサービスクライアントオペレーションのインターセプター
次のコードは、ビルダーのインターセプタープロパティに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 { ... }
特定のオペレーションのみのインターセプター
withConfig
拡張機能を使用すると、任意のサービスクライアントの 1 つ以上のオペレーションのサービスクライアント設定を上書きできます。この機能を使用すると、オペレーションのサブセットに追加のインターセプターを登録できます。
次の の例では、 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.
}