Middleware de Solicitação e Resposta
O Resty oferece a capacidade de usar middleware para interceptar solicitações antes e respostas depois, permitindo o processamento personalizado das operações de solicitação e resposta. Esta abordagem é mais flexível do que as funções de retorno de chamada.
// Crie um cliente Resty
cliente := resty.New()
// Registre o middleware de solicitação
cliente.OnBeforeRequest(func(c *resty.Client, req *resty.Request) error {
// Agora você pode acessar o cliente e o objeto de solicitação atual
// Realize as operações conforme necessário
return nil // Retorne nil em caso de sucesso, caso contrário retorne um erro
})
// Registre o middleware de resposta
cliente.OnAfterResponse(func(c *resty.Client, resp *resty.Response) error {
// Agora você pode acessar o cliente e o objeto de resposta atual
// Realize as operações conforme necessário
return nil // Retorne nil em caso de sucesso, caso contrário retorne um erro
})
Ganchos de Erro
O Resty fornece um gancho OnError, que pode ser acionado nos casos a seguir:
- O cliente é incapaz de enviar uma solicitação devido a tempo limite de conexão, falha de handshake TLS, etc.
- A solicitação foi repetida o número máximo de vezes, mas ainda falha.
Se o servidor responder, o erro original será encapsulado em *resty.ResponseError
, que contém a última resposta recebida.
// Crie um cliente Resty
cliente := resty.New()
cliente.OnError(func(req *resty.Request, err error) {
if v, ok := err.(*resty.ResponseError); ok {
// v.Response contém a última resposta do servidor
// v.Err contém o erro original
}
// Registre erros, aumente as métricas, etc.
})
Políticas de Redirecionamento
O Resty oferece várias políticas de redirecionamento disponíveis e suporta o uso simultâneo de várias políticas.
// Crie um cliente Resty
cliente := resty.New()
// Defina a política de redirecionamento para o cliente. Crie uma política conforme necessário
cliente.SetRedirectPolicy(resty.FlexibleRedirectPolicy(15))
// Use várias políticas, como contagem de redirecionamento, verificação de domínio, etc.
cliente.SetRedirectPolicy(resty.FlexibleRedirectPolicy(20),
resty.DomainCheckRedirectPolicy("host1.com", "host2.org", "host3.net"))
Política de Redirecionamento Personalizada
Implemente a interface RedirectPolicy e registre-a com o cliente Resty. Consulte redirect.go para obter mais informações.
// Crie um cliente Resty
cliente := resty.New()
// Use a função original com resty.SetRedirectPolicy
cliente.SetRedirectPolicy(resty.RedirectPolicyFunc(func(req *http.Request, via []*http.Request) error {
// Implemente sua lógica aqui
// Retorne nil para continuar o redirecionamento, ou retorne um erro para interromper/prevenir o redirecionamento
return nil
}))
//---------------------------------------------------
// Crie uma política de redirecionamento mais flexível usando uma estrutura
type CustomRedirectPolicy struct {
// Defina variáveis aqui
}
func (c *CustomRedirectPolicy) Apply(req *http.Request, via []*http.Request) error {
// Implemente sua lógica aqui
// Retorne nil para continuar o redirecionamento, ou retorne um erro para interromper/prevenir o redirecionamento
return nil
}
// Registre no resty
cliente.SetRedirectPolicy(CustomRedirectPolicy{/* Inicialize as variáveis */})
Configurações de Proxy
Por padrão, o Go
oferece suporte a proxies por meio da variável de ambiente HTTP_PROXY
. O Resty fornece suporte a proxy por meio de SetProxy
e RemoveProxy
. Escolha de acordo com suas necessidades.
As configurações de proxy no nível do cliente serão aplicadas a todas as solicitações.
// Crie um cliente Resty
cliente := resty.New()
// Configure a URL e a porta do proxy
cliente.SetProxy("http://proxyserver:8888")
// Para remover as configurações de proxy
cliente.RemoveProxy()