Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Puedes usar interceptores para facilitar la ejecución de las solicitudes y respuestas de la API. Los interceptores son mecanismos abiertos en los que el SDK invoca el código que escribes para introducir un comportamiento en el ciclo de vida de la solicitud y la respuesta. De esta forma, puedes modificar una solicitud en curso, depurar el procesamiento de la solicitud, ver los errores y mucho más.
El siguiente ejemplo muestra un interceptor simple que añade un encabezado adicional a todas las solicitudes salientes antes de entrar en el bucle de reintentos:
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(())
}
}
Registro de interceptores
Los interceptores se registran cuando se crea un cliente de servicio o cuando se anula la configuración de una operación específica. El registro varía en función de si desea que el interceptor se aplique a todas las operaciones de su cliente o solo a algunas específicas.
Interceptor para todas las operaciones en un cliente de servicio
Para registrar un interceptor para todo el cliente, añada el interceptor utilizando el patrón. 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);
Interceptor solo para una operación específica
Para registrar un interceptor solo para una operación, utilice la customize
extensión. Con este método, puede anular las configuraciones del cliente de servicio a nivel de cada operación. Para obtener más información sobre las operaciones personalizables, consulte. Anular la configuración de una sola operación del cliente
// Only the list_buckets operation will have the header added.
s3.list_buckets()
.customize()
.interceptor(AddHeaderInterceptor::new("x-bar-version", "3.7"))
.send()
.await?;