Configurar interceptores no AWS SDK para Rust - AWS SDK para Rust

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Configurar interceptores no AWS SDK para Rust

Você pode usar interceptores para se conectar à execução de solicitações e respostas de API. Os interceptadores são mecanismos abertos nos quais o SDK chama o código que você escreve para injetar comportamento no ciclo de vida da solicitação/resposta. Dessa forma, você pode modificar uma solicitação em andamento, depurar o processamento da solicitação, ver erros e muito mais.

O seguinte exemplo mostra um interceptor simples que adiciona um cabeçalho adicional a todas as solicitações de saída antes que o loop de repetição seja inserido:

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 obter mais informações e os hooks interceptores disponíveis, consulte a característica Intercept.

Registro de interceptor

Você registra interceptadores ao construir um cliente de serviço ou ao substituir a configuração de uma operação específica. O registro difere dependendo se você deseja que o interceptador se aplique a todas as operações do cliente ou apenas a operações específicas.

Interceptor para todas as operações em um cliente de serviço

Para registrar um interceptor para todo o cliente, adicione o interceptor usando o padrão 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 apenas para uma operação específica

Para registrar um interceptor para apenas uma única operação, use a extensão customize. Você pode substituir as configurações do seu cliente de serviço no nível por operação usando esse método. Para obter mais informações sobre operações personalizáveis, consulte Substituir uma única configuração de operação de um cliente no 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?;