نصب
require github.com/go-resty/resty/v2 v2.7.0
یا
go get github.com/go-resty/resty/v2
مثال Resty
مثالهای زیر به شما کمک میکند تا از کتابخانه resty بهصورت راحتتری استفاده کنید.
// وارد کردن resty به کد شما و به عنوان `resty` مراجعه کنید.
import "github.com/go-resty/resty/v2"
درخواست GET ساده
// ایجاد یک مشتری Resty
client := resty.New()
resp, err := client.R().
EnableTrace().
Get("https://httpbin.org/get")
// بررسی شیء پاسخ
fmt.Println("اطلاعات پاسخ:")
fmt.Println(" خطا :", err)
fmt.Println(" کد وضعیت:", resp.StatusCode())
fmt.Println(" وضعیت :", resp.Status())
fmt.Println(" پروتکل :", resp.Proto())
fmt.Println(" زمان :", resp.Time())
fmt.Println(" دریافت در تاریخ:", resp.ReceivedAt())
fmt.Println(" بدنه :\n", resp)
fmt.Println()
// بررسی اطلاعات ردگیری
fmt.Println("اطلاعات ردگیری درخواست:")
ti := resp.Request.TraceInfo()
fmt.Println(" جستجوی DNS :", ti.DNSLookup)
fmt.Println(" زمان اتصال :", ti.ConnTime)
fmt.Println(" زمان اتصال TCP:", ti.TCPConnTime)
fmt.Println(" دست دادن TLS :", ti.TLSHandshake)
fmt.Println(" زمان سرور :", ti.ServerTime)
fmt.Println(" زمان پاسخ :", ti.ResponseTime)
fmt.Println(" کل زمان :", ti.TotalTime)
fmt.Println(" آیا اتصال دوباره استفاده شده است :", ti.IsConnReused)
fmt.Println(" اتصال بوده است :", ti.IsConnWasIdle)
fmt.Println(" زمان اتصال آزاد :", ti.ConnIdleTime)
fmt.Println(" تلاش درخواست:", ti.RequestAttempt)
fmt.Println(" آدرس از راه دور:", ti.RemoteAddr.String())
Output
اطلاعات پاسخ:
خطا :
کد وضعیت: 200
وضعیت : 200 OK
پروتکل : HTTP/2.0
زمان : 457.034718ms
دریافت در تاریخ: 2020-09-14 15:35:29.784681 -0700 PDT m=+0.458137045
بدنه :
{
"args": {},
"headers": {
"Accept-Encoding": "gzip",
"Host": "httpbin.org",
"User-Agent": "go-resty/2.4.0 (https://github.com/go-resty/resty)",
"X-Amzn-Trace-Id": "Root=1-5f5ff031-000ff6292204aa6898e4de49"
},
"origin": "0.0.0.0",
"url": "https://httpbin.org/get"
}
اطلاعات ردگیری درخواست:
جستجوی DNS : 4.074657ms
زمان اتصال : 381.709936ms
زمان اتصال TCP: 77.428048ms
دست دادن TLS : 299.623597ms
زمان سرور : 75.414703ms
زمان پاسخ : 79.337µs
کل زمان : 457.034718ms
آیا اتصال دوباره استفاده شده است : false
اتصال بوده است : false
زمان اتصال آزاد : 0s
تلاش درخواست: 1
آدرس از راه دور: 3.221.81.55:443
درخواست GET پیچیده
// ایجاد یک مشتری Resty
client := resty.New()
// تنظیم پارامترهای پرس و جو
resp, err := client.R().
SetQueryParams(map[string]string{
"page_no": "1",
"limit": "20",
"sort":"name",
"order": "asc",
"random":strconv.FormatInt(time.Now().Unix(), 10),
}).
SetHeader("Accept", "application/json").
SetAuthToken("BC594900518B4F7EAC75BD37F019E08FBC594900518B4F7EAC75BD37F019E08F").
Get("/search_result")
// مثال استفاده از متد Request.SetQueryString
resp, err := client.R().
SetQueryString("productId=232&template=fresh-sample&cat=resty&source=google&kw=buy a lot more").
SetHeader("Accept", "application/json").
SetAuthToken("BC594900518B4F7EAC75BD37F019E08FBC594900518B4F7EAC75BD37F019E08F").
Get("/show_product")
// در صورت لزوم، نوع محتوای پاسخ مشخص شده را به Resty میگوید که پاسخ JSON را به ساختار خود تبدیل کند
resp, err := client.R().
SetResult(result).
ForceContentType("application/json").
Get("v2/alpine/manifests/latest")
انواع مختلف درخواست POST
// ایجاد یک مشتری Resty
client := resty.New()
// POST رشته JSON
// اگر تنظیمات سطح مشتری تنظیم شده باشد، نوع محتوا نیازی به تنظیم ندارد
resp, err := client.R().
SetHeader("Content-Type", "application/json").
SetBody(`{"username":"testuser", "password":"testpass"}`).
SetResult(&AuthSuccess{}). // یا SetResult(AuthSuccess{}).
Post("https://myapp.com/login")
// POST آرایه []byte
// اگر تنظیمات سطح مشتری تنظیم شده باشد، نوع محتوا نیازی به تنظیم ندارد
resp, err := client.R().
SetHeader("Content-Type", "application/json").
SetBody([]byte(`{"username":"testuser", "password":"testpass"}`).
SetResult(&AuthSuccess{}). // یا SetResult(AuthSuccess{}).
Post("https://myapp.com/login")
// POST ساختار، به صورت پیشفرض به نوع محتوای JSON، نیاز به تنظیم ندارد
resp, err := client.R().
SetBody(User{Username: "testuser", Password: "testpass"}).
SetResult(&AuthSuccess{}). // یا SetResult(AuthSuccess{}).
SetError(&AuthError{}). // یا SetError(AuthError{}).
Post("https://myapp.com/login")
// POST نقشه، به صورت پیشفرض به نوع محتوای JSON، نیاز به تنظیم ندارد
resp, err := client.R().
SetBody(map[string]interface{}{"username": "testuser", "password": "testpass"}).
SetResult(&AuthSuccess{}). // یا SetResult(AuthSuccess{}).
SetError(&AuthError{}). // یا SetError(AuthError{}).
Post("https://myapp.com/login")
// آپلود فایل به صورت آرایه بایت خام
fileBytes, _ := os.ReadFile("/Users/jeeva/mydocument.pdf")
// توجه: ما هیچگونه تنظیمی برای هدر نوع محتوا نمیکنیم زیرا go-resty به صورت خودکار Content-Type را تشخیص میدهد
resp, err := client.R().
SetBody(fileBytes).
SetContentLength(true). // Dropbox این مقدار را مورد نیاز دارد
SetAuthToken("").
SetError(&DropboxError{}). // یا SetError(DropboxError{}).
Post("https://content.dropboxapi.com/1/files_put/auto/resty/mydocument.pdf") // این متد نیز بارگذاری را از طریق PUT پشتیبانی میکند
// توجه: اگر تنظیمات سطح مشتری تنظیم نشده باشد، resty نوع محتوای درخواست را تشخیص میدهد
// * برای دادههای struct و map، به طور پیشفرض به 'application/json' تنظیم میشود
// * سپس به نوع محتوای متن عادی میشود
درخواست PUT
شما میتوانید از ترکیبهای مختلف فراخوانی متد PUT
استفاده کنید همانند نمونهای که برای متد POST
نشان داده شده است.
// توجه: این یک نمونه از استفاده از متد PUT است، برای ترکیبهای بیشتر لطفا به POST مراجعه کنید.
// ایجاد یک مشتری Resty
client := resty.New()
// ارسال درخواست با نوع محتوای JSON
// اگر تنظیمات سطح مشتری وجود داشته باشد، توکن اعتبارسنجی میتواند حذف شود، خطای
resp, err := client.R().
SetBody(Article{
Title: "go-resty",
Content: "این محتوای مقاله من است، آه آره!",
Author: "Jeevanandam M",
Tags: []string{"مقاله", "نمونه", "رستی"},
}).
SetAuthToken("C6A79608-782F-4ED0-A11D-BD82FAD829CD").
SetError(&Error{}). // یا SetError(Error{}).
Put("https://myapp.com/article/1234")
درخواست PATCH
شما میتوانید از ترکیبهای مختلف فراخوانی متد PATCH
استفاده کنید همانند نمونهای که برای متد POST
نشان داده شده است.
// توجه: این یک نمونه از استفاده از متد PATCH است، برای ترکیبهای بیشتر لطفا به POST مراجعه کنید.
// ایجاد یک مشتری Resty
client := resty.New()
// ارسال درخواست با نوع محتوای JSON
// اگر تنظیمات سطح مشتری وجود داشته باشد، توکن اعتبارسنجی میتواند حذف شود، خطای
resp, err := client.R().
SetBody(Article{
Tags: []string{"برچسب جدید 1", "برچسب جدید 2"},
}).
SetAuthToken("C6A79608-782F-4ED0-A11D-BD82FAD829CD").
SetError(&Error{}). // یا SetError(Error{}).
Patch("https://myapp.com/articles/1234")
درخواست DELETE، HEAD، OPTIONS
// ایجاد یک مشتری Resty
client := resty.New()
// حذف یک مقاله
// اگر تنظیمات سطح مشتری وجود داشته باشد، توکن اعتبارسنجی میتواند حذف شود، خطای
resp, err := client.R().
SetAuthToken("C6A79608-782F-4ED0-A11D-BD82FAD829CD").
SetError(&Error{}). // یا SetError(Error{}).
Delete("https://myapp.com/articles/1234")
// حذف چندین مقاله با رشته JSON به عنوان بسته/محتوا
// اگر تنظیمات سطح مشتری وجود داشته باشد، توکن اعتبارسنجی میتواند حذف شود، خطای
resp, err := client.R().
SetAuthToken("C6A79608-782F-4ED0-A11D-BD82FAD829CD").
SetError(&Error{}). // یا SetError(Error{}).
SetHeader("Content-Type", "application/json").
SetBody(`{article_ids: [1002, 1006, 1007, 87683, 45432] }`).
Delete("https://myapp.com/articles")
// دریافت اطلاعات هدر یک منبع
// اگر تنظیمات سطح مشتری وجود داشته باشد، توکن اعتبارسنجی میتواند حذف شود
resp, err := client.R().
SetAuthToken("C6A79608-782F-4ED0-A11D-BD82FAD829CD").
Head("https://myapp.com/videos/hi-res-video")
// دریافت اطلاعات گزینههای یک منبع
// اگر تنظیمات سطح مشتری وجود داشته باشد، توکن اعتبارسنجی میتواند حذف شود
resp, err := client.R().
SetAuthToken("C6A79608-782F-4ED0-A11D-BD82FAD829CD").
Options("https://myapp.com/servers/nyc-dc-01")
راهاندازی عملیات سریالسازی/غیرسریالسازی JSON و XML
کاربران میتوانند کتابخانههای JSON/XML انتخابی خود را با resty ثبت کنند یا کتابخانههای خود را بنویسند. به طور پیشفرض، resty کتابخانههای استاندارد encoding/json
و encoding/xml
را ثبت میکند.
// نمونهای از ثبت json-iterator
import jsoniter "github.com/json-iterator/go"
json := jsoniter.ConfigCompatibleWithStandardLibrary
client := resty.New().
SetJSONMarshaler(json.Marshal).
SetJSONUnmarshaler(json.Unmarshal)
// به همین ترتیب، کاربران میتوانند XML را به صورت زیر تنظیم کنند -
client.SetXMLMarshaler(xml.Marshal).
SetXMLUnmarshaler(xml.Unmarshal)