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()