İstek ve Yanıt Ara Yazılımı

Resty, isteklerin öncesinde ve yanıtların sonrasında middleware kullanarak özelleştirilmiş istek ve yanıt işlemlerinin yapılmasına olanak tanır. Bu yaklaşım, geriçağrı (callback) fonksiyonlarından daha esnek bir yapı sunar.

// Resty istemcisi oluştur
client := resty.New()

// İstek ara yazılımını kaydet
client.OnBeforeRequest(func(c *resty.Client, req *resty.Request) error {
    // Artık istemciye ve mevcut istek nesnesine erişebilirsiniz
    // Gerekli işlemleri gerçekleştirin

    return nil  // Başarılı ise nil döndürün, aksi halde bir hata döndürün
  })

// Yanıt ara yazılımını kaydet
client.OnAfterResponse(func(c *resty.Client, resp *resty.Response) error {
    // Artık istemciye ve mevcut yanıt nesnesine erişebilirsiniz
    // Gerekli işlemleri gerçekleştirin

    return nil  // Başarılı ise nil döndürün, aksi halde bir hata döndürün
  })

Hata Kancaları

Resty, aşağıdaki durumlarda çağrılabilen bir OnError kancası sağlar:

  • İstemci, bağlantı zaman aşımı, TLS el sıkışması hatası vb. nedeniyle bir istek gönderemiyor.
  • İstek maksimum sayıda kez yeniden denendi, ancak hala başarısız oldu.

Sunucu yanıt verdiğinde, orijinal hata *resty.ResponseError içinde sarmalanır ve en son alınan yanıtı içerir.

// Resty istemcisi oluştur
client := resty.New()

client.OnError(func(req *resty.Request, err error) {
  if v, ok := err.(*resty.ResponseError); ok {
    // v.Response sunucunun son yanıtını içerir
    // v.Err orijinal hatayı içerir
  }
  // Hataları kaydedin, metrikleri artırın, vb.
})

Yönlendirme Politikaları

Resty, birden fazla yönlendirme politikasının aynı anda kullanılmasını destekleyen çeşitli yönlendirme politikaları sağlar.

// Resty istemcisi oluştur
client := resty.New()

// İstemci için yönlendirme politikasını ayarlayın. İhtiyaca göre bir politika oluşturun
client.SetRedirectPolicy(resty.FlexibleRedirectPolicy(15))

// Yönlendirme sayısı, alan kontrolü vb. gibi birden fazla politika kullanın
client.SetRedirectPolicy(resty.FlexibleRedirectPolicy(20),
                        resty.DomainCheckRedirectPolicy("host1.com", "host2.org", "host3.net"))

Özel Yönlendirme Politikası

RedirectPolicy arayüzünü uygulayın ve resty istemcisiyle kayıt edin. Daha fazla bilgi için redirect.go'ya bakınız.

// Resty istemcisi oluştur
client := resty.New()

// resty.SetRedirectPolicy ile orijinal fonksiyonu kullanın
client.SetRedirectPolicy(resty.RedirectPolicyFunc(func(req *http.Request, via []*http.Request) error {
  // Burada mantığınızı uygulayın

  // Yönlendirmeyi devam ettirmek için nil döndürün, aksi halde bir hata döndürün
  return nil
}))

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

// Yapı kullanarak daha esnek bir yönlendirme politikası oluşturun
type CustomRedirectPolicy struct {
  // Burada değişkenleri tanımlayın
}

func (c *CustomRedirectPolicy) Apply(req *http.Request, via []*http.Request) error {
  // Burada mantığınızı uygulayın

  // Yönlendirmeyi devam ettirmek için nil döndürün, aksi halde bir hata döndürün
  return nil
}

// Resty'de kayıt edin
client.SetRedirectPolicy(CustomRedirectPolicy{/* Değişkenleri başlatın */})

Proxy Ayarları

Varsayılan olarak, Go, çevre değişkeni HTTP_PROXY aracılığıyla proxyleri destekler. Resty, SetProxy ve RemoveProxy aracılığıyla proxy desteği sağlar. İhtiyaca göre seçim yapın.

İstemci seviyesindeki proxy ayarları tüm isteklere uygulanacaktır.

// Resty istemcisi oluştur
client := resty.New()

// Proxy URL ve portunu ayarlayın
client.SetProxy("http://proxyserver:8888")

// Proxy ayarlarını kaldırmak için
client.RemoveProxy()