Configuración de interceptores en el 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 el 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 invoca el código que escribes para introducir un comportamiento en el ciclo de vida. request/response 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 en la operación. Para obtener más información sobre operaciones personalizables, consulte Anular la configuración de una sola operación de un cliente en el AWS SDK de 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?;