Middleware żądania i odpowiedzi
Resty umożliwia korzystanie z oprogramowania pośredniczącego w przechwytywaniu żądań przed i odpowiedzi po nich, co pozwala na niestandardową obróbkę operacji żądania i odpowiedzi. Ten podejście jest bardziej elastyczne niż funkcje wywoławcze.
// Utwórz klienta Resty
klient := resty.New()
// Zarejestruj oprogramowanie pośredniczące w żądaniu
klient.OnBeforeRequest(func(c *resty.Client, req *resty.Request) error {
// Teraz można uzyskać dostęp do klienta i bieżącego obiektu żądania
// Wykonaj operacje, jak to jest potrzebne
return nil // Zwróć nil w przypadku sukcesu, w przeciwnym razie zwróć błąd
})
// Zarejestruj oprogramowanie pośredniczące w odpowiedzi
klient.OnAfterResponse(func(c *resty.Client, resp *resty.Response) error {
// Teraz można uzyskać dostęp do klienta i bieżącego obiektu odpowiedzi
// Wykonaj operacje, jak to jest potrzebne
return nil // Zwróć nil w przypadku sukcesu, w przeciwnym razie zwróć błąd
})
Haki błędów
Resty zapewnia hak OnError, który może być wywołany w następujących przypadkach:
- Klient nie może wysłać żądania z powodu przekroczenia limitu czasu połączenia, niepowodzenia negocjacji TLS, itp.
- Żądanie zostało powtórzone maksymalną liczbę razy, ale wciąż zakończyło się niepowodzeniem.
Jeśli serwer odpowie, oryginalny błąd zostanie zawinięty w *resty.ResponseError
, który zawiera ostatnio otrzymaną odpowiedź.
// Utwórz klienta Resty
klient := resty.New()
klient.OnError(func(req *resty.Request, err error) {
if v, ok := err.(*resty.ResponseError); ok {
// v.Response zawiera ostatnią odpowiedź serwera
// v.Err zawiera oryginalny błąd
}
// Rejestruj błędy, zwiększaj metryki, itp.
})
Polityki przekierowań
Resty zapewnia kilka dostępnych polityk przekierowań i obsługuje jednoczesne korzystanie z wielu polityk.
// Utwórz klienta Resty
klient := resty.New()
// Ustaw politykę przekierowań dla klienta. Utwórz politykę według potrzeb
klient.SetRedirectPolicy(resty.FlexibleRedirectPolicy(15))
// Wykorzystaj wiele polityk, takich jak liczba przekierowań, sprawdzenie domeny, itp.
klient.SetRedirectPolicy(resty.FlexibleRedirectPolicy(20),
resty.DomainCheckRedirectPolicy("host1.com", "host2.org", "host3.net"))
Niestandardowa polityka przekierowań
Zaimplementuj interfejs RedirectPolicy i zarejestruj go z klientem resty. Proszę odwołać się do redirect.go, aby uzyskać więcej informacji.
// Utwórz klienta Resty
klient := resty.New()
// Użyj oryginalnej funkcji z resty.SetRedirectPolicy
klient.SetRedirectPolicy(resty.RedirectPolicyFunc(func(req *http.Request, via []*http.Request) error {
// Wprowadź swoją logikę tutaj
// Zwróć nil, aby kontynuować przekierowanie, lub zwróć błąd, aby zatrzymać/zapobiec przekierowaniu
return nil
}))
//---------------------------------------------------
// Utwórz bardziej elastyczną politykę przekierowań, korzystając ze struktury
type CustomRedirectPolicy struct {
// Zdefiniuj tutaj zmienne
}
func (c *CustomRedirectPolicy) Apply(req *http.Request, via []*http.Request) error {
// Wprowadź swoją logikę tutaj
// Zwróć nil, aby kontynuować przekierowanie, lub zwróć błąd, aby zatrzymać/zapobiec przekierowaniu
return nil
}
// Zarejestruj w resty
klient.SetRedirectPolicy(CustomRedirectPolicy{/* Inicjalizuj zmienne */})
Ustawienia proxy
Domyślnie Go
obsługuje proxy poprzez zmienną środowiskową HTTP_PROXY
. Resty zapewnia obsługę proxy poprzez SetProxy
i RemoveProxy
. Wybierz odpowiednio do swoich potrzeb.
Ustawienia proxy na poziomie klienta zostaną zastosowane do wszystkich żądań.
// Utwórz klienta Resty
klient := resty.New()
// Ustaw adres URL i port serwera proxy
klient.SetProxy("http://proxyserver:8888")
// Aby usunąć ustawienia proxy
klient.RemoveProxy()