Middleware de requête et de réponse

Resty offre la possibilité d'utiliser des middleware pour intercepter les requêtes avant et les réponses après, permettant un traitement personnalisé des opérations de requête et de réponse. Cette approche est plus flexible que les fonctions de rappel.

// Créer un client Resty
client := resty.New()

// Enregistrer le middleware de requête
client.OnBeforeRequest(func(c *resty.Client, req *resty.Request) error {
    // Vous pouvez maintenant accéder au client et à l'objet requête actuel
    // Effectuer les opérations nécessaires

    return nil  // Renvoyer nil en cas de succès, sinon renvoyer une erreur
  })

// Enregistrer le middleware de réponse
client.OnAfterResponse(func(c *resty.Client, resp *resty.Response) error {
    // Vous pouvez maintenant accéder au client et à l'objet réponse actuel
    // Effectuer les opérations nécessaires

    return nil  // Renvoyer nil en cas de succès, sinon renvoyer une erreur
  })

Hooks d'erreur

Resty propose un hook OnError, qui peut être appelé dans les cas suivants :

  • Le client est incapable d'envoyer une requête en raison d'un délai de connexion, d'un échec de poignée TLS, etc.
  • La requête a été réessayée un nombre maximal de fois mais échoue toujours.

Si le serveur répond, l'erreur d'origine sera enveloppée dans *resty.ResponseError, qui contient la dernière réponse reçue.

// Créer un client Resty
client := resty.New()

client.OnError(func(req *resty.Request, err error) {
  if v, ok := err.(*resty.ResponseError); ok {
    // v.Response contient la dernière réponse du serveur
    // v.Err contient l'erreur d'origine
  }
  // Journaliser les erreurs, augmenter les métriques, etc.
})

Politiques de redirection

Resty propose plusieurs politiques de redirection disponibles et prend en charge l'utilisation simultanée de plusieurs politiques.

// Créer un client Resty
client := resty.New()

// Définir la politique de redirection pour le client. Créer une politique au besoin
client.SetRedirectPolicy(resty.FlexibleRedirectPolicy(15))

// Utiliser plusieurs politiques, telles que le nombre de redirections, la vérification de domaine, etc.
client.SetRedirectPolicy(resty.FlexibleRedirectPolicy(20),
                        resty.DomainCheckRedirectPolicy("host1.com", "host2.org", "host3.net"))

Politique de redirection personnalisée

Implémentez l'interface RedirectPolicy et enregistrez-la avec le client Resty. Veuillez vous référer à redirect.go pour plus d'informations.

// Créer un client Resty
client := resty.New()

// Utiliser la fonction originale avec resty.SetRedirectPolicy
client.SetRedirectPolicy(resty.RedirectPolicyFunc(func(req *http.Request, via []*http.Request) error {
  // Implémentez votre logique ici

  // Renvoyez nil pour continuer la redirection, ou renvoyez une erreur pour arrêter/prévenir la redirection
  return nil
}))

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

// Créer une politique de redirection plus flexible en utilisant une structure
type CustomRedirectPolicy struct {
  // Définir les variables ici
}

func (c *CustomRedirectPolicy) Apply(req *http.Request, via []*http.Request) error {
  // Implémentez votre logique ici

  // Renvoyez nil pour continuer la redirection, ou renvoyez une erreur pour arrêter/prévenir la redirection
  return nil
}

// Enregistrer dans resty
client.SetRedirectPolicy(CustomRedirectPolicy{/* Initialiser les variables */})

Paramètres de proxy

Par défaut, Go prend en charge les proxies via la variable d'environnement HTTP_PROXY. Resty offre une prise en charge du proxy via SetProxy et RemoveProxy. Choisissez en fonction de vos besoins.

Les paramètres de proxy au niveau client seront appliqués à toutes les requêtes.

// Créer un client Resty
client := resty.New()

// Définir l'URL et le port du proxy
client.SetProxy("http://serveurproxy:8888")

// Pour supprimer les paramètres du proxy
client.RemoveProxy()