翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
インターセプターを使用して、API リクエストとレスポンスの実行に接続できます。インターセプターは、SDK が記述したコードを呼び出して、リクエスト/レスポンスのライフサイクルに動作を挿入するオープンエンドメカニズムです。これにより、処理中のリクエストの変更、リクエスト処理のデバッグ、エラーの表示などを行うことができます。
次の例は、再試行ループを入力する前にすべての送信リクエストにヘッダーを追加するシンプルなインターセプターを示しています。
use std::borrow::Cow;
use aws_smithy_runtime_api::client::interceptors::{
Intercept,
context::BeforeTransmitInterceptorContextMut,
};
use aws_smithy_runtime_api::client::runtime_components::RuntimeComponents;
use aws_smithy_types::config_bag::ConfigBag;
use aws_smithy_runtime_api::box_error::BoxError;
#[derive(Debug)]
struct AddHeaderInterceptor {
key: Cow<'static, str>,
value: Cow<'static, str>,
}
impl AddHeaderInterceptor {
fn new(key: &'static str, value: &'static str) -> Self {
Self {
key: Cow::Borrowed(key),
value: Cow::Borrowed(value),
}
}
}
impl Intercept for AddHeaderInterceptor {
fn name(&self) -> &'static str {
"AddHeader"
}
fn modify_before_retry_loop(
&self,
context: &mut BeforeTransmitInterceptorContextMut<'_>,
_runtime_components: &RuntimeComponents,
_cfg: &mut ConfigBag,
) -> Result<(), BoxError> {
let headers = context.request_mut().headers_mut();
headers.insert(self.key.clone(), self.value.clone());
Ok(())
}
}
詳細と使用可能なインターセプターフックについては、インターセ
インターセプター登録
インターセプターは、サービスクライアントを構築するとき、または特定のオペレーションの設定を上書きするときに登録します。の登録は、インターセプターをクライアントのすべてのオペレーションに適用するか、特定のオペレーションのみに適用するかによって異なります。
サービスクライアント上のすべてのオペレーションのインターセプター
クライアント全体のインターセプターを登録するには、 Builder
パターンを使用してインターセプターを追加します。
let config = aws_config::defaults(BehaviorVersion::latest())
.load()
.await;
// All service operations invoked using 's3' will have the header added.
let s3_conf = aws_sdk_s3::config::Builder::from(&config)
.interceptor(AddHeaderInterceptor::new("x-foo-version", "2.7"))
.build();
let s3 = aws_sdk_s3::Client::from_conf(s3_conf);
特定のオペレーションのみのインターセプター
インターセプターを 1 回のオペレーションのみに登録するには、 customize
拡張機能を使用します。この方法を使用して、オペレーションごとのレベルでサービスクライアント設定を上書きできます。カスタマイズ可能なオペレーションの詳細については、「」を参照してくださいクライアントの 1 つのオペレーション設定を上書きする。
// Only the list_buckets operation will have the header added.
s3.list_buckets()
.customize()
.interceptor(AddHeaderInterceptor::new("x-bar-version", "3.7"))
.send()
.await?;