Go (Golang) के लिए HTTP-क्लाइंट: HTTP के साथ काम करने के लिए शीर्ष लाइब्रेरी

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Go (Golang) के लिए HTTP-क्लाइंट: सर्वश्रेष्ठ लाइब्रेरी का अवलोकन और तुलना



Go (Golang) उच्च-लोड वेब सेवाओं, माइक्रोसर्विसेज और API एकीकरण बनाने के लिए सबसे लोकप्रिय भाषाओं में से एक है। HTTP अनुरोधों के साथ काम करना लगभग किसी भी बैकएंड का मूल कार्य है। Go की मानक लाइब्रेरी में पहले से ही एक शक्तिशाली पैकेज net/http है, लेकिन जटिल परिदृश्यों (स्वचालित रीट्राय, कनेक्शन पूल, सुविधाजनक fluent इंटरफ़ेस) के लिए विशेष लाइब्रेरी विकसित की गई हैं। इस लेख में, हम Go के लिए शीर्ष HTTP-क्लाइंट, उनकी विशेषताओं, प्रदर्शन और उपयोग के उदाहरणों पर चर्चा करेंगे।



1. मानक net/http — मूल आधार



net/http पैकेज Go में निर्मित है और इसे स्थापित करने की आवश्यकता नहीं है। यह बुनियादी आवश्यकताओं को पूरी तरह से कवर करता है: GET/POST अनुरोध भेजना, हेडर, कुकीज़, टाइमआउट के साथ काम करना। हालांकि, उन्नत उपयोग (उदाहरण के लिए, सेटिंग्स के साथ कनेक्शन पूल) के लिए http.Transport के मैन्युअल कॉन्फ़िगरेशन की आवश्यकता होती है।



package main

import ( "fmt" "io" "net/http" "time")

func main() { client := &http.Client{ Timeout: 10 * time.Second, Transport: &http.Transport{ MaxIdleConns: 100, IdleConnTimeout: 90 * time.Second, DisableCompression: false, }, }

resp, err := client.Get("https://api.github.com") if err != nil { panic(err) } defer resp.Body.Close()

body, _ := io.ReadAll(resp.Body) fmt.Println("Status:", resp.StatusCode) fmt.Println("Body length:", len(body))}


लाभ: शून्य निर्भरता, पूर्ण नियंत्रण, HTTP/2 समर्थन, RoundTripper रैपर के माध्यम से अंतर्निहित मिडलवेयर।

नुकसान: सरल अनुरोधों के लिए वर्बोज़ कोड, कोई fluent इंटरफ़ेस नहीं, रीट्राय और JSON डिसीरियलाइज़ेशन को कॉन्फ़िगर करना कठिन।



2. resty — सरल और सुरुचिपूर्ण REST-क्लाइंट



resty लाइब्रेरी (स्थापना: go get github.com/go-resty/resty/v2) Go में सबसे लोकप्रिय HTTP-क्लाइंट में से एक है। यह fluent इंटरफ़ेस, स्वचालित JSON/XML डिसीरियलाइज़ेशन, सुविधाजनक कॉल चेन प्रदान करता है।



package main

import ( "fmt" "github.com/go-resty/resty/v2")

type User struct { ID int `json:"id"` Name string `json:"name"`}

func main() { client := resty.New() client.SetBaseURL("https://jsonplaceholder.typicode.com")

var users []User resp, err := client.R(). SetResult(&users). Get("/users")

if err != nil { panic(err) }

fmt.Println("Status:", resp.StatusCode()) fmt.Println("First user:", users[0].Name)}


लाभ: संक्षिप्त सिंटैक्स, रीट्राय, टाइमआउट, प्रॉक्सी के लिए अंतर्निहित समर्थन, स्वचालित त्रुटि हैंडलिंग, multipart/form-data के साथ काम करना।

नुकसान: उच्च लोड पर net/http से थोड़ा धीमा (एब्स्ट्रैक्शन के कारण), HTTP/3 का समर्थन नहीं करता।



3. grequests — लोकप्रिय Python-क्लाइंट का Go संस्करण



grequests (स्थापना: go get github.com/levigross/grequests) Python Requests से प्रेरित है। यह GET, POST, PUT, DELETE के लिए एक सरल API प्रदान करता है, सत्र, कुकीज़, स्वचालित JSON प्रोसेसिंग का समर्थन करता है।



package main

import ( "fmt" "github.com/levigross/grequests")

func main() { resp, err := grequests.Get("https://httpbin.org/get", &grequests.RequestOptions{ Headers: map[string]string{"Accept": "application/json"}, }) if err != nil { panic(err) }

var data map[string]interface{} resp.JSON(&data) fmt.Println("URL:", data["url"])}


लाभ: न्यूनतम कोड, JSON के साथ सुविधाजनक काम, फ़ाइल अपलोड का समर्थन।

नुकसान: परियोजना

अनुशंसाएँ