Go Resty ایک Go زبان کتابخانہ ہے جو RESTful API clients کو تیار کرنے کے لیے استعمال ہوتا ہے۔ Go Resty کے ذریعے توسعہ دان RESTful API clients کو زیادہ تیزی اور بہتری سے تیار کرسکتے ہیں۔ یہ باب Go Resty کے ساتھ تیزی سے کس طرح شروع ہونے کا تعارف کراتا ہے۔

انسٹالیشن

require github.com/go-resty/resty/v2 v2.7.0

یا

go get github.com/go-resty/resty/v2

Resty مثال

نیچے دی گئی مثالیں آپ کو resty لائبریری کا استعمال کرنے میں اتنی آسانی سے مدد فراہم کریں گی۔

// Apne code mein resty ko import karen aur is ko `resty` ke tor par istemaal karen.
import "github.com/go-resty/resty/v2"

سادہ GET درخواست

// Ek Resty client banaen
client := resty.New()

resp, err := client.R().
    EnableTrace().
    Get("https://httpbin.org/get")

// Response object ki tafseel karen
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()

// Gharai se maloomat hasil karen
fmt.Println("درخواست کی ریسپانس کی معلومات:")
ti := resp.Request.TraceInfo()
fmt.Println("  DNS تلاش      :", ti.DNSLookup)
fmt.Println("  جڑنے کا وقت    :", ti.ConnTime)
fmt.Println("  ٹی سی پی جڑنے کا وقت:", ti.TCPConnTime)
fmt.Println("  تی ایل ایس ہینڈ شیک:", 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.034718ملی سیکنڈ
  وصول ہوا: 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.074657ملی سیکنڈ
  جڑنے کا وقت    : 381.709936ملی سیکنڈ
  ٹی سی پی جڑنے کا وقت: 77.428048ملی سیکنڈ
  تی ایل ایس ہینڈ شیک: 299.623597ملی سیکنڈ
  سرور کا وقت     : 75.414703ملی سیکنڈ
  ریسپانس کا وقت   : 79.337µسیکنڈ
  کل وقت      : 457.034718ملی سیکنڈ
  کیا جوڑا گیا ہے  : false
  جوڑا گیا ہے   : false
  جوڑا ہوا وقت  : 0سیکنڈ
  درخواست کی کوشش  : 1
  دور کا پتہ  : 3.221.81.55:443

مشکل GET درخواست

// ریستی کلائنٹ بنائیں
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")


// درخواست.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")


// اگر ضرورت ہو تو، بنیادی ردِ عمل کو جاہل کرنے کے لئے مخصوص ریسپانس مواد کو بتانے کے لئے تعین کرنے کے لئے مخصوص ریسپانس مواد کو فورس کریں
resp, err := client.R().
      SetResult(result).
      ForceContentType("application/json").
      Get("v2/alpine/manifests/latest")

مختلف POST درخواست کی مثالیں

// ریستی کلائنٹ بنائیں
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 خود بطور اندراجی کی نوعیت کو خود بخود تشخیص کرے گا
resp, err := client.R().
      SetBody(fileBytes).
      SetContentLength(true).          // ڈراپ بوکس کو یہ قیمت درکار ہے
      SetAuthToken("").
      SetError(&DropboxError{}).       // یا SetError(DropboxError{}).
      Post("https://content.dropboxapi.com/1/files_put/auto/resty/mydocument.pdf") // ڈراپ بوکس کو PUT میثاق بھی مدد کرتی ہے

// یاد رہے: اگر کنٹینٹ ٹائپ ہیڈر تعین نہیں کیا گیا ہے تو resty کو درخواست بامس کی کونٹینٹ-ٹائپ کو تشخیص کرہے ہیں
//  * سٹرکٹ اور میپ ڈیٹا نوع کے لئے یہ 'application/json' پر فال ٹ ہوتا ہے
//  * پھر یہ عام متن کنٹینٹ قسم ہوتی ہے

PUT درخواست

آپ POST کے لئے دکھایا گیا سپریم کال کی طرح PUT کے مختلف ترکیبات استعمال کر سکتے ہیں۔

// نوٹ: یہ PUT میتھڈ کا استعمال کرنے کا ایک مثال ہے، زیادہ ترکیبات کے لئے براہ کرم POST دیکھیں

// ایک Resty کلائنٹ بنائیں
client := resty.New()

// JSON مواد کے ساتھ درخواست بھیجیں
// اگر کلائنٹ سطح کی ترتیبات ہوں، تو تصدیق ٹوکن نظرانداز کیا جا سکتا ہے، خراب
resp، err := client.R().
      SetBody(Article{
        Title: "go-resty",
        Content: "یہ میرا مضمون ہے، ہاں یہ ہے!",
        Author: "جیوانندم ایم",
        Tags: []string{"article", "example", "resty"},
      }).
      SetAuthToken("C6A79608-782F-4ED0-A11D-BD82FAD829CD").
      SetError(&Error{}).       // یا سیٹ ایرر(Error{}).
      Put("https://myapp.com/article/1234")

PATCH درخواست

آپ POST کے لیۓ دکھائی گئی طرح کو استعمال کرکے PATCH کے مختلف ترکیبات استعمال کر سکتے ہیں۔

// نوٹ: یہ 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{}).       // یا سیٹ ایرر(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{}).       // یا سیٹ ایرر(Error{}).
      Delete("https://myapp.com/articles/1234")

// JSON سٹرنگ کے طور پر مواد/کنٹینٹ کے ساتھ متعدد مضامین کو حذف کریں
// اگر کلائنٹ سطح کی ترتیبات ہوں، تو تصدیق ٹوکن نظرانداز کیا جا سکتا ہے، خراب
resp، err := client.R().
      SetAuthToken("C6A79608-782F-4ED0-A11D-BD82FAD829CD").
      SetError(&Error{}).       // یا سیٹ ایرر(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)