درخواست اور جواب میڈل ویئر
Resty کو میڈل ویئر استعمال کرنے کی اجازت ہے تاکہ درخواستوں کو روکا جا سکے اور جوابات کو سنسر کرا سکے، درخواست اور جواب کی کسی بھی عام فعالیت کو مخصوص طریقہ کار کے ذریعے استعمال کرنے کی اجازت دیتا ہے۔ یہ طریقہ کار کی کارکردگی کال بیک فنکشنز سے زیادہ لچکدار ہوتی ہے۔
// ریسٹی کلائنٹ بنائیں
client := resty.New()
// درخواست میڈل ویئر رجسٹر کریں
client.OnBeforeRequest(func(c *resty.Client, req *resty.Request) error {
// اب آپ کو کلائنٹ اور موجودہ درخواست کا بنیادی کردار ادا کرنے کی اجازت ہے
// ضرورت کے مطابق عملیات کریں
return nil // اگر کامیاب ہو تو nil واپس کریں، ورنہ خرابی واپس کریں
})
// ج باب میڈل ویئر رجسٹر کریں
client.OnAfterResponse(func(c *resty.Client, resp *resty.Response) error {
// اب آپ کو کلائنٹ اور موجودہ جواب کے آبجیکٹ تک رسائی ہوتی ہے
// ضرورت کے مطابق عملیات کریں
return nil // اگر کامیاب ہو تو nil واپس کریں، ورنہ خرابی واپس کریں
})
خرابی ہکس
Resty بفرض یہ ہوک کو فراہم کرتا ہے، جو مندرجہ ذیل صورتوں میں بلایا جا سکتا ہے:
- کلائنٹ درخواست بھیجنے کے قابل نہیں ہے بشرائی وقت ختم ہونے، TLS ہینڈشیک ناکام ہونے وغیرہ
- درخواست نے زیادہ سے زیادہ مرتبہ دوبارہ کوشش کی ہے لیکن اب بھی ناکام ہو گئی ہے۔
اگر سرور جواب دیتا ہے، تو اصل خرابی کو *resty.ResponseError
میں چھپ دیا جائے گا، جو آخری موصول کردہ جواب کا حامل ہوتا ہے۔
// ریسٹی کلاینٹ بنائیں
client := resty.New()
client.OnError(func(req *resty.Request, err error) {
if v, ok := err.(*resty.ResponseError); ok {
// v.Response میں سرور کا آخری جواب شامل ہے
// v.Err اصل خرابی شامل ہے
}
// خرابیوں کو لاگ کریں، میٹرکس میں اضافہ کریں، وغیرہ۔
})
ریڈائریکشن پالیسیز
Resty مختلف دستیاب ریڈائرکشن پالیسیز فراہم کرتا ہے اور ایک ہی وقت میں متعدد پالیسیز کا سمرتھنہ دیتا ہے۔
// ریسٹی کلائنٹ بنائیں
client := resty.New()
// کلائنٹ کے لئے ریڈائرکشن پالیسی تشکیل دیں۔ ضرورت کے مطابق ایک پالیسی بنائیں
client.SetRedirectPolicy(resty.FlexibleRedirectPolicy(15))
// تعدادی پالیسیز استعمال کریں، جیسے ریڈائریکشن کاؤنٹ، ڈومین چیک وغیرہ۔
client.SetRedirectPolicy(resty.FlexibleRedirectPolicy(20),
resty.DomainCheckRedirectPolicy("host1.com", "host2.org", "host3.net"))
خودمختار ریڈائریکشن پالیسی
RedirectPolicy انٹرفیس پر عمل کرنے کا طریقہ کار منتصب کریں اور اسے ریسٹی کلائنٹ کے ساتھ رجسٹر کریں۔ مزید معلومات کے لئے redirect.go دیکھیں۔
// ریسٹی کلائنٹ بنائیں
client := resty.New()
// resty.SetRedirectPolicy کے اصل فنکشن کا استعمال کریں
client.SetRedirectPolicy(resty.RedirectPolicyFunc(func(req *http.Request, via []*http.Request) error {
// یہاں آپ کے منطقی عملیات پر عمل کریں
// 45اوزار نہ کروں کے لئے nil واپس کریں، یا ریڈائریکشن روکنے کے لئے ایرر واپس کریں
return nil
}))
//---------------------------------------------------
// a more flexible redirection policy using a structure Create
type CustomRedirectPolicy struct {
// یہاں متغیرات تعین کریں
}
func (c *CustomRedirectPolicy) Apply(req *http.Request, via []*http.Request) error {
// یہاں آپ کے منطقی عملیات پر عمل کریں
// کو روکنے کے لئے nil واپس کریں، ورنہ ریڈائریکشن جاری کرنے کے لئے ایرر واپس کریں
return nil
}
// resty میں رجسٹر کریں
client.SetRedirectPolicy(CustomRedirectPolicy{/*متغیرات کا آغاز */})
پراکسی ترتیبات
پہلے سے ہی Go
ماحولیاتی متغیر HTTP_PROXY
کے ذریعے پراکسیوں کی حمایت کرتا ہے۔ Resty SetProxy
اور RemoveProxy
کے ذریعے پراکسی کی حمایت فراہم کرتا ہے۔ آپ کے ضروریات کے مطابق چنائیں۔
کلائنٹ سطح پر پراکسی ترتیبات کو سبھی درخواستوں پر لاگو کیا جائے گا۔
// ریسٹی کلائنٹ بنائیں
client := resty.New()
// پراکسی URL اور پورٹ تعین کریں
client.SetProxy("http://proxyserver:8888")
// پراکسی ترتیب کو ہٹانے کے لئے
client.RemoveProxy()