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á.
Interceptores HTTP
Você pode usar interceptores para se conectar à execução de solicitações e respostas da API. Os interceptores são mecanismos abertos nos quais o SDK chama o código que você grava 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, visualizar exceções e muito mais.
O exemplo a seguir 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.
class AddHeader(
private val key: String,
private val value: String
) : HttpInterceptor {
override suspend fun modifyBeforeRetryLoop(context: ProtocolRequestInterceptorContext<Any, HttpRequest>): HttpRequest {
val httpReqBuilder = context.protocolRequest.toBuilder()
httpReqBuilder.headers[key] = value
return httpReqBuilder.build()
}
}
Para obter mais informações e os ganchos de interceptação disponíveis, consulte a interface do Interceptor
Registro do interceptor
Você registra interceptores ao construir um cliente de serviço ou ao substituir a configuração de um conjunto específico de operações.
Interceptor para todas as operações do cliente de serviço
O código a seguir adiciona uma AddHeader
instância à propriedade interceptors do construtor. Essa adição adiciona o x-foo-version
cabeçalho a todas as operações antes que o loop de repetição seja inserido.
val s3 = S3Client.fromEnvironment {
interceptors += AddHeader("x-foo-version", "1.0")
}
// All service operations invoked using 's3' will have the header appended.
s3.listBuckets { ... }
s3.listObjectsV2 { ... }
Interceptor somente para operações específicas
Usando a withConfig
extensão, você pode substituir a configuração do cliente de serviço para uma ou mais operações para qualquer cliente de serviço. Com esse recurso, você pode registrar interceptores adicionais para um subconjunto de operações.
O exemplo a seguir substitui a configuração da s3
instância para operações dentro da use
extensão. As operações chamadas s3Scoped
contêm os cabeçalhos x-foo-version
e os x-bar-version
cabeçalhos.
// 's3' instance created in the previous code snippet.
s3.withConfig {
interceptors += AddHeader("x-bar-version", "3.7")
}.use { s3Scoped ->
// All service operations invoked using 's3Scoped' trigger interceptors
// that were registered when the client was created and any added in the
// withConfig { ... } extension.
}