Permintaan dan Respons Middleware
Resty menyediakan kemampuan untuk menggunakan middleware untuk menyisipkan permintaan sebelum dan respons setelah, memungkinkan pengolahan kustom dari operasi permintaan dan respons. Pendekatan ini lebih fleksibel daripada fungsi panggilan kembali.
// Membuat klien Resty
klien := resty.New()
// Daftarkan middleware permintaan
klien.OnBeforeRequest(func(c *resty.Client, req *resty.Request) error {
// Sekarang Anda dapat mengakses klien dan objek permintaan saat ini
// Lakukan operasi sesuai kebutuhan
return nil // Mengembalikan nil jika berhasil, sebaliknya mengembalikan kesalahan
})
// Daftarkan middleware respons
klien.OnAfterResponse(func(c *resty.Client, resp *resty.Response) error {
// Sekarang Anda dapat mengakses klien dan objek respons saat ini
// Lakukan operasi sesuai kebutuhan
return nil // Mengembalikan nil jika berhasil, sebaliknya mengembalikan kesalahan
})
Hook Kesalahan
Resty menyediakan hook OnError, yang dapat dipanggil dalam kasus-kasus berikut:
- Klien tidak dapat mengirim permintaan karena waktu habis, kegagalan percabangan TLS, dll.
- Permintaan telah diulang sebanyak mungkin tetapi masih gagal.
Jika server merespons, kesalahan asli akan dibungkus dalam *resty.ResponseError
, yang berisi respons terakhir yang diterima.
// Membuat klien Resty
klien := resty.New()
klien.OnError(func(req *resty.Request, err error) {
if v, ok := err.(*resty.ResponseError); ok {
// v.Response berisi respons terakhir dari server
// v.Err berisi kesalahan asli
}
// Catat kesalahan, tingkatkan metrik, dll.
})
Kebijakan Pengalihan
Resty menyediakan beberapa kebijakan pengalihan yang tersedia dan mendukung penggunaan simultan dari beberapa kebijakan.
// Membuat klien Resty
klien := resty.New()
// Tetapkan kebijakan pengalihan untuk klien. Buat kebijakan sesuai kebutuhan
klien.SetRedirectPolicy(resty.FlexibleRedirectPolicy(15))
// Gunakan beberapa kebijakan, seperti penghitungan pengalihan, pemeriksaan domain, dll.
klien.SetRedirectPolicy(resty.FlexibleRedirectPolicy(20),
resty.DomainCheckRedirectPolicy("host1.com", "host2.org", "host3.net"))
Kebijakan Pengalihan Kustom
Implementasikan antarmuka RedirectPolicy dan daftarkan dengan klien resty. Harap lihat redirect.go untuk informasi lebih lanjut.
// Membuat klien Resty
klien := resty.New()
// Gunakan fungsi asli dengan resty.SetRedirectPolicy
klien.SetRedirectPolicy(resty.RedirectPolicyFunc(func(req *http.Request, via []*http.Request) error {
// Implementasikan logika Anda di sini
// Mengembalikan nil untuk melanjutkan pengalihan, atau mengembalikan kesalahan untuk menghentikan/mencegah pengalihan
return nil
}))
//---------------------------------------------------
// Buat kebijakan pengalihan yang lebih fleksibel menggunakan sebuah struktur
type CustomRedirectPolicy struct {
// Definisikan variabel di sini
}
func (c *CustomRedirectPolicy) Apply(req *http.Request, via []*http.Request) error {
// Implementasikan logika Anda di sini
// Mengembalikan nil untuk melanjutkan pengalihan, atau mengembalikan kesalahan untuk menghentikan/mencegah pengalihan
return nil
}
// Daftarkan di resty
klien.SetRedirectPolicy(CustomRedirectPolicy{/* Inisialisasi variabel */})
Pengaturan Proksi
Secara default, Go
mendukung proksi melalui variabel lingkungan HTTP_PROXY
. Resty menyediakan dukungan proksi melalui SetProxy
dan RemoveProxy
. Pilih sesuai kebutuhan Anda.
Pengaturan proksi pada level klien akan diterapkan pada semua permintaan.
// Membuat klien Resty
klien := resty.New()
// Tetapkan URL dan port proksi
klien.SetProxy("http://proxyserver:8888")
// Untuk menghapus pengaturan proksi
klien.RemoveProxy()