Middleware de solicitud y respuesta
Resty proporciona la capacidad de utilizar middleware para interceptar las solicitudes antes y las respuestas después, lo que permite el procesamiento personalizado de las operaciones de solicitud y respuesta. Este enfoque es más flexible que las funciones de devolución de llamada.
// Crear un cliente Resty
client := resty.New()
// Registrar middleware de solicitud
client.OnBeforeRequest(func(c *resty.Client, req *resty.Request) error {
// Ahora puedes acceder al cliente y al objeto de solicitud actual
// Realizar operaciones según sea necesario
return nil // Devuelve nil si es exitoso, de lo contrario devuelve un error
})
// Registrar middleware de respuesta
client.OnAfterResponse(func(c *resty.Client, resp *resty.Response) error {
// Ahora puedes acceder al cliente y al objeto de respuesta actual
// Realizar operaciones según sea necesario
return nil // Devuelve nil si es exitoso, de lo contrario devuelve un error
})
Ganchos de Error
Resty proporciona un gancho OnError, que puede ser llamado en los siguientes casos:
- El cliente no puede enviar una solicitud debido a un tiempo de espera de conexión, falla en el handshake TLS, etc.
- La solicitud ha sido intentada el número máximo de veces pero aún falla.
Si el servidor responde, el error original será envuelto en *resty.ResponseError
, que contiene la última respuesta recibida.
// Crear un cliente Resty
client := resty.New()
client.OnError(func(req *resty.Request, err error) {
if v, ok := err.(*resty.ResponseError); ok {
// v.Response contiene la última respuesta del servidor
// v.Err contiene el error original
}
// Registrar errores, aumentar métricas, etc.
})
Políticas de Redirección
Resty proporciona varias políticas de redirección disponibles y admite el uso simultáneo de múltiples políticas.
// Crear un cliente Resty
client := resty.New()
// Establecer la política de redirección para el cliente. Crear una política según sea necesario
client.SetRedirectPolicy(resty.FlexibleRedirectPolicy(15))
// Usar múltiples políticas, como conteo de redirección, verificación de dominio, etc.
client.SetRedirectPolicy(resty.FlexibleRedirectPolicy(20),
resty.DomainCheckRedirectPolicy("host1.com", "host2.org", "host3.net"))
Política de Redirección Personalizada
Implementar la interfaz RedirectPolicy y registrarla con el cliente Resty. Consulta redirect.go para obtener más información.
// Crear un cliente Resty
client := resty.New()
// Utilizar la función original con resty.SetRedirectPolicy
client.SetRedirectPolicy(resty.RedirectPolicyFunc(func(req *http.Request, via []*http.Request) error {
// Implementa tu lógica aquí
// Devuelve nil para continuar con la redirección, o devuelve un error para detener/prevenir la redirección
return nil
}))
//---------------------------------------------------
// Crear una política de redirección más flexible utilizando una estructura
type CustomRedirectPolicy struct {
// Definir variables aquí
}
func (c *CustomRedirectPolicy) Apply(req *http.Request, via []*http.Request) error {
// Implementa tu lógica aquí
// Devuelve nil para continuar con la redirección, o devuelve un error para detener/prevenir la redirección
return nil
}
// Registrar en resty
client.SetRedirectPolicy(CustomRedirectPolicy{/* Inicializar variables */})
Configuración de Proxy
De forma predeterminada, Go
admite proxies a través de la variable de entorno HTTP_PROXY
. Resty proporciona soporte para proxy a través de SetProxy
y RemoveProxy
. Elija según sus necesidades.
La configuración de proxy a nivel de cliente se aplicará a todas las solicitudes.
// Crear un cliente Resty
client := resty.New()
// Establecer la URL y el puerto del proxy
client.SetProxy("http://proxyserver:8888")
// Para eliminar la configuración del proxy
client.RemoveProxy()