Anfrage- und Antwort-Middleware

Resty bietet die Möglichkeit, Middleware zu verwenden, um Anfragen vor und Antworten nach deren Versand abzufangen, um benutzerdefinierte Verarbeitungsvorgänge für Anfragen und Antworten zu ermöglichen. Dieser Ansatz ist flexibler als Callback-Funktionen.

// Erstellen eines Resty-Clients
client := resty.New()

// Registrierung der Anfrage-Middleware
client.OnBeforeRequest(func(c *resty.Client, req *resty.Request) error {
    // Jetzt können Sie auf den Client und das aktuelle Anfrageobjekt zugreifen
    // Führen Sie die erforderlichen Operationen durch

    return nil  // Geben Sie nil zurück, wenn erfolgreich, andernfalls geben Sie einen Fehler zurück
  })

// Registrierung der Antwort-Middleware
client.OnAfterResponse(func(c *resty.Client, resp *resty.Response) error {
    // Jetzt können Sie auf den Client und das aktuelle Antwortobjekt zugreifen
    // Führen Sie die erforderlichen Operationen durch

    return nil  // Geben Sie nil zurück, wenn erfolgreich, andernfalls geben Sie einen Fehler zurück
  })

Fehlerhaken

Resty bietet einen OnError-Haken, der in den folgenden Fällen aufgerufen werden kann:

  • Der Client kann aufgrund von Verbindungszeitüberschreitung, TLS-Handshake-Fehler usw. keine Anfrage senden.
  • Die Anfrage wurde die maximale Anzahl von Wiederholungen durchlaufen, aber es ist dennoch fehlgeschlagen.

Wenn der Server antwortet, wird der ursprüngliche Fehler in *resty.ResponseError verpackt, der die zuletzt empfangene Antwort enthält.

// Erstellen eines Resty-Clients
client := resty.New()

client.OnError(func(req *resty.Request, err error) {
  if v, ok := err.(*resty.ResponseError); ok {
    // v.Response enthält die letzte Antwort des Servers
    // v.Err enthält den ursprünglichen Fehler
  }
  // Fehler protokollieren, Metriken erhöhen, usw.
})

Weiterleitungsrichtlinien

Resty bietet mehrere verfügbare Weiterleitungsrichtlinien und unterstützt die gleichzeitige Verwendung mehrerer Richtlinien.

// Erstellen eines Resty-Clients
client := resty.New()

// Setzen Sie die Weiterleitungsrichtlinie für den Client. Erstellen Sie bei Bedarf eine Richtlinie
client.SetRedirectPolicy(resty.FlexibleRedirectPolicy(15))

// Verwenden Sie mehrere Richtlinien, z.B. Weiterleitungsanzahl, Domainprüfung, usw.
client.SetRedirectPolicy(resty.FlexibleRedirectPolicy(20),
                        resty.DomainCheckRedirectPolicy("host1.com", "host2.org", "host3.net"))

Benutzerdefinierte Weiterleitungsrichtlinie

Implementieren Sie das RedirectPolicy-Interface und registrieren Sie es beim Resty-Client. Bitte beachten Sie die Datei redirect.go für weitere Informationen.

// Erstellen eines Resty-Clients
client := resty.New()

// Verwenden Sie die ursprüngliche Funktion mit resty.SetRedirectPolicy
client.SetRedirectPolicy(resty.RedirectPolicyFunc(func(req *http.Request, via []*http.Request) error {
  // Implementieren Sie hier Ihre Logik

  // Geben Sie nil zurück, um mit der Weiterleitung fortzufahren, oder geben Sie einen Fehler zurück, um die Weiterleitung zu stoppen/verhindern
  return nil
}))

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

// Erstellen einer flexibleren Weiterleitungsrichtlinie mithilfe einer Struktur
type CustomRedirectPolicy struct {
  // Definieren Sie hier Variablen
}

func (c *CustomRedirectPolicy) Apply(req *http.Request, via []*http.Request) error {
  // Implementieren Sie hier Ihre Logik

  // Geben Sie nil zurück, um mit der Weiterleitung fortzufahren, oder geben Sie einen Fehler zurück, um die Weiterleitung zu stoppen/verhindern
  return nil
}

// Registrieren in Resty
client.SetRedirectPolicy(CustomRedirectPolicy{/* Variablen initialisieren */})

Proxy-Einstellungen

Standardmäßig unterstützt Go Proxys über die Umgebungsvariable HTTP_PROXY. Resty bietet Proxy-Unterstützung durch SetProxy und RemoveProxy. Wählen Sie entsprechend Ihren Anforderungen.

Proxy-Einstellungen auf Client-Ebene werden auf alle Anfragen angewendet.

// Erstellen eines Resty-Clients
client := resty.New()

// Setzen Sie die Proxy-URL und den Port
client.SetProxy("http://proxyserver:8888")

// Um die Proxy-Einstellungen zu entfernen
client.RemoveProxy()