Configuración de interceptores en AWS SDK para Rust - AWS SDK para Rust

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.

Configuración de interceptores en AWS SDK para Rust

Puede usar interceptores para conectarse a la ejecución de las solicitudes y respuestas de la API. Los interceptores son mecanismos abiertos en los que el SDK llama al código que escribe para inyectar comportamiento en el ciclo de vida de las solicitudes o respuestas. De esta forma, se puede modificar una solicitud en tránsito, depurar el procesamiento de solicitudes, ver errores y mucho más.

En el siguiente ejemplo se muestra un interceptor sencillo que agrega 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(()) } }

Para obtener más información y conocer los enlaces de interceptor disponibles, consulte el indicador de intercepción.

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 difiere en función de si desea que el interceptor se aplique a todas las operaciones del cliente o solo a operaciones específicas.

Interceptor para todas las operaciones en un cliente de servicio

Para registrar un interceptor para todo el cliente, agregue 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 extensión customize. Con este método, puede anular las configuraciones del cliente de servicio a nivel de operación. Para obtener más información sobre operaciones personalizables, consulte Anulación de la configuración de una sola operación de un cliente en AWS SDK para Rust.

// Only the list_buckets operation will have the header added. s3.list_buckets() .customize() .interceptor(AddHeaderInterceptor::new("x-bar-version", "3.7")) .send() .await?;