มัลติแต่ละอทย์คำสั่งกลางและคำตอบกลาง

Resty มีความสามารถในการใช้คำสั่งกลางเพื่อแอบดูคำขอก่อนและคำตอบหลัง ซึ่งช่วยให้สามารถปรับแต่งการปฏิบัติต่อคำขอและคำตอบได้อย่างอิสระ วิธีการนี้ยืดหยุ่นกว่าฟังก์ชันการตอบซ้ำ

// สร้างโคลายเอนต์ 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 มี OnError ซึ่งสามารถเรียกใช้ในกรณีต่อไปนี้:

  • ลูกค้าไม่สามารถส่งคำขอเนื่องจากการถดถอยการเชื่อมต่อ การล่มมือ 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"))

นโยบายการเปลี่ยนทางกำหนดเอง

ปรับปรุงอินเตอร์เฟซ RedirectPolicy และลงทะเบียนกับไคลเอนต์ Resty โปรดอ่านเพิ่มเติมที่ redirect.go

// สร้างโคลายเอนต์ Resty
client := resty.New()

// ใช้ฟังก์ชันเดิมด้วย resty.SetRedirectPolicy
client.SetRedirectPolicy(resty.RedirectPolicyFunc(func(req *http.Request, via []*http.Request) error {
  // ปฏิบัติตามตรรกะของคุณที่นี่

  // คืนค่า nil เพื่อดำเนินการเปลี่ยนทางต่อ หรือคืนค่าข้อผิดพลาดเพื่อหยุด/ป้องกันการเปลี่ยนทาง
  return nil
}))

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

// สร้างนโยบายการเปลี่ยนทางที่ยืดหยุ่นมากขึ้นโดยใช้โครงสร้าง
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 เลือกตามความต้องการของคุณ

การตั้งค่าพร็อกซี่ในระดับของไคลเอนต์จะถูกนำไปใช้กับคำขอทั้งหมด

// สร้างโคลายเอนต์ Resty
client := resty.New()

// ตั้งค่า URL และพอร์ตของพร็อกซี่
client.SetProxy("http://proxyserver:8888")

// เพื่อลบการตั้งค่าพร็อกซี่
client.RemoveProxy()