Middleware di richiesta e risposta

Resty fornisce la possibilità di utilizzare middleware per intercettare le richieste prima e le risposte dopo, consentendo l'elaborazione personalizzata delle operazioni di richiesta e risposta. Questo approccio è più flessibile rispetto alle funzioni di callback.

// Crea un client Resty
client := resty.New()

// Registra il middleware di richiesta
client.OnBeforeRequest(func(c *resty.Client, req *resty.Request) error {
    // Ora puoi accedere al client e all'oggetto richiesta corrente
    // Eseguire le operazioni come necessario

    return nil  // Restituisci nil se tutto è andato a buon fine, altrimenti restituisci un errore
  })

// Registra il middleware di risposta
client.OnAfterResponse(func(c *resty.Client, resp *resty.Response) error {
    // Ora puoi accedere al client e all'oggetto risposta corrente
    // Eseguire le operazioni come necessario

    return nil  // Restituisci nil se tutto è andato a buon fine, altrimenti restituisci un errore
  })

Errori Hooks

Resty fornisce un hook OnError, che può essere chiamato nei seguenti casi:

  • Il client non è in grado di inviare una richiesta a causa di timeout della connessione, fallimento della handshake TLS, ecc.
  • La richiesta è stata ripetuta il numero massimo di volte ma fallisce ancora.

Se il server risponde, l'errore originale sarà incapsulato in *resty.ResponseError, che contiene l'ultima risposta ricevuta.

// Crea un client Resty
client := resty.New()

client.OnError(func(req *resty.Request, err error) {
  if v, ok := err.(*resty.ResponseError); ok {
    // v.Response contiene l'ultima risposta del server
    // v.Err contiene l'errore originale
  }
  // Registra gli errori, aumenta le metriche, ecc.
})

Politiche di reindirizzamento

Resty fornisce diverse politiche di reindirizzamento disponibili e supporta l'uso simultaneo di molteplici politiche.

// Crea un client Resty
client := resty.New()

// Imposta la politica di reindirizzamento per il client. Crea una politica come necessario
client.SetRedirectPolicy(resty.FlexibleRedirectPolicy(15))

// Utilizza più politiche, come conteggio dei reindirizzamenti, verifica del dominio, ecc.
client.SetRedirectPolicy(resty.FlexibleRedirectPolicy(20),
                        resty.DomainCheckRedirectPolicy("host1.com", "host2.org", "host3.net"))

Politica di reindirizzamento personalizzata

Implementa l'interfaccia RedirectPolicy e registrala con il client Resty. Fare riferimento a redirect.go per ulteriori informazioni.

// Crea un client Resty
client := resty.New()

// Utilizza la funzione originale con resty.SetRedirectPolicy
client.SetRedirectPolicy(resty.RedirectPolicyFunc(func(req *http.Request, via []*http.Request) error {
  // Implementa la logica qui

  // Restituisci nil per continuare il reindirizzamento, o restituisci un errore per interrompere/prevenire il reindirizzamento
  return nil
}))

//---------------------------------------------------

// Crea una politica di reindirizzamento più flessibile utilizzando una struttura
type CustomRedirectPolicy struct {
  // Definisci le variabili qui
}

func (c *CustomRedirectPolicy) Apply(req *http.Request, via []*http.Request) error {
  // Implementa la logica qui

  // Restituisci nil per continuare il reindirizzamento, o restituisci un errore per interrompere/prevenire il reindirizzamento
  return nil
}

// Registra in Resty
client.SetRedirectPolicy(CustomRedirectPolicy{/* Inizializza le variabili */})

Impostazioni del proxy

Per impostazione predefinita, Go supporta i proxy attraverso la variabile di ambiente HTTP_PROXY. Resty fornisce il supporto proxy tramite SetProxy e RemoveProxy. Scegli in base alle tue esigenze.

Le impostazioni del proxy a livello client verranno applicate a tutte le richieste.

// Crea un client Resty
client := resty.New()

// Imposta l'URL e la porta del proxy
client.SetProxy("http://proxyserver:8888")

// Per rimuovere le impostazioni del proxy
client.RemoveProxy()