অনুরোধ এবং প্রতিক্রিয়া মিডলওয়্যার

Resty এর মাধ্যমে এক্সরোত আর্কিটেকচারের জন্য মিডলওয়্যার ব্যবহার করার সুযোগ রয়েছে, যাতে অনুরোধ প্রক্রিয়ার আগে এবং প্রতিক্রিয়া পরে সানান করা যায়, এবং অনুরোধ এবং প্রতিক্রিয়া অপারেশনের কাস্টম প্রসেসিং সম্ভব হয়।

// resty ক্লায়েন্ট তৈরি করুন
client := resty.New()

// অনুরোধ মিডলওয়্যার নিবন্ধন করুন
client.OnBeforeRequest(func(c *resty.Client, req *resty.Request) error {
    // এখন আপনি ক্লায়েন্ট এবং বর্তমান অনুরোধ অবজেক্ট অ্যাক্সেস করতে পারেন 
    // প্রয়োজন মতো অপারেশন চালান 

    return nil // যদি সফল হয়, তাহলে নাইল ফিরে দিন, অন্যথায় একটি ত্রুটি ফিরে দিন
  })

// প্রতিক্রিয়া মিডলওয়্যার নিবন্ধন করুন
client.OnAfterResponse(func(c *resty.Client, resp *resty.Response) error {
    // এখন আপনি ক্লায়েন্ট এবং বর্তমান প্রতিক্রিয়া অবজেক্ট অ্যাক্সেস করতে পারেন
    // প্রয়োজন মতো অপারেশন চালান 

    return nil // যদি সফল হয়, তাহলে নাইল ফিরে দিন, অন্যথায় একটি ত্রুটি ফিরে দিন
  })

ত্রুটি হুক

Resty ক্লায়েন্ট অনুরোধ টাইম আউট, TLS হ্যান্ডশেইক ব্যর্থ, ইত্যাদি এর কারণে যদি অনুরোধ পাঠানো সম্ভব না হয়। অথবা অনুরোধটি সর্বাধিক সংখ্যায় পুনরায় প্রচেষ্টা করা হয় তবে এখনো ব্যর্থ হয়।

যদি সার্ভার প্রতিক্রিয়া দেয়, তবে আদি ত্রুটি কে " resty.ResponseError " এ রেপো করা হবে যা শোধোর্থের সর্বশেষ প্রাপ্ত প্রতিক্রিয়া রেখে আছে।

// একটি resty ক্লায়েন্ট তৈরি করুন
client := resty.New()

client.OnError(func(req *resty.Request, err error) {
  if v, ok := err.(*resty.ResponseError); ok {
    // v.Response সার্ভারের সর্বশেষ প্রতিক্রিয়া ধারণ করে 
    // v.Err আদি ত্রুটি ধারণ করে
  }
  // ত্রুটি লগ করুন, মেট্রিকস বাড়ান, ইত্যাদি
})

পুনর্পাঠন নীতি

Resty সোন্য সোন্য উন্নত পুনর্পাঠন নীতি সরবরাহ করে এবং একাধিক নীতি সমতুল্যতার সমর্থন করে।

// একটি resty ক্লায়েন্ট তৈরি করুন
client := resty.New()

// ক্লায়েন্টের পুনর্পাঠন নীতি সেট করুন। প্রয়োজন অনুসারে একটি নীতিতে স্তুতি করুন 
client.SetRedirectPolicy(resty.FlexibleRedirectPolicy(15))

// একাধিক নীতি ব্যবহার করুন, যেমন পুনর্পাঠন গণনা, ডোমেন পরিশীলন, ইত্যাদি
client.SetRedirectPolicy(resty.FlexibleRedirectPolicy(20),
                        resty.DomainCheckRedirectPolicy("host1.com", "host2.org", "host3.net"))

কাস্টম পুনর্পাঠন নীতি

পুনর্পাঠন নীতি ইন্টারফেস অনুসরণ করুন এবং তা resty ক্লায়েন্ট এর সাথে নিবন্ধন করুন। মূল তথ্যের জন্য redirect.go দেখুন।

// একটি resty ক্লায়েন্ট তৈরি করুন
client := resty.New()

// resty.SetRedirectPolicy দিয়ে মূল ফাংশন ব্যবহার করুন
client.SetRedirectPolicy(resty.RedirectPolicyFunc(func(req *http.Request, via []*http.Request) error {
  // আপনার লজিক এখানে অনুসরণ করুন 

  // পুনর্পাঠন চালিয়ে দিতে নিল ফিরান অথবা পুনর্পাঠন থামান নিয়ে ত্রুটি ফিরিয়ে দিন
  return nil
}))

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

// একটি আরও সমদর্প্তি পুনর্পাঠন নীতি ব্যবহার করুন একটি অবস্থানে
type CustomRedirectPolicy struct {
  // এখানে চলাকালের ডিফাইন করুন
}

func (c *CustomRedirectPolicy) Apply(req *http.Request, via []*http.Request) error {
  // আপনার লজিক এখানে অনুসরণ করুন 

  // পুনর্পাঠন চালিয়ে দিতে নিল ফিরান অথবা পুনর্পাঠন থামান নিয়ে ত্রুটি ফিরিয়ে দিন
  return nil
}

// resty এ নিবন্ধন করুন
client.SetRedirectPolicy(CustomRedirectPolicy{/* চলাকাল প্রারম্ভ করুন */})

প্রক্সি সেটিংস

ডিফল্টভাবে, Go এ মাধ্যমে প্রক্সি পুর্বাপস্থানে সমর্থন দেয় দ্বারা পরিবেশ ভেরিয়েবল HTTP_PROXY ব্যবহার করে। Resty প্রয়োজনে অনুসারে SetProxy এবং RemoveProxy দিয়ে প্রক্সি সমর্থন সরবরাহ করে।

ক্লায়েন্ট পর্যায়ক প্রক্সি সেটিংগস সমস্ত অনুরোধগুলির জন্য প্রযোজ্য হবে।

// একটি resty ক্লায়েন্ট তৈরি করুন
client := resty.New()

// প্রক্সি URL এবং পোর্ট সেট করুন
client.SetProxy("http://proxyserver:8888")

// প্রক্সি সেটিংস সরানোর জন্য
client.RemoveProxy()