Go (Golang) HTTP क्लाइंट: नेटवर्क के लिए टॉप लाइब्रेरी
Go (Golang) अपनी परफॉर्मेंस और बिल्ट-इन नेटवर्क सपोर्ट के लिए मशहूर है। स्टैंडर्ड net/http पैकेज एक शक्तिशाली HTTP क्लाइंट देता है, लेकिन जटिल प्रोजेक्ट्स में अक्सर ऑटोमैटिक रीट्राई, कनेक्शन पूल, एरर हैंडलिंग और फ्लूएंट इंटरफेस जैसी अतिरिक्त सुविधाओं की जरूरत होती है। इस आर्टिकल में हम Go में HTTP क्लाइंट बनाने के लिए बेस्ट लाइब्रेरी देखेंगे, उनकी तुलना करेंगे और प्रैक्टिकल उदाहरण देंगे।
1. स्टैंडर्ड पैकेज net/http
बिल्ट-इन net/http क्लाइंट ज़्यादातर Go ऐप्लिकेशन की बुनियाद है। यह बेसिक ज़रूरतों को पूरा करता है: GET/POST रिक्वेस्ट, हेडर, कुकी और टाइमआउट। लेकिन एडवांस्ड उपयोग के लिए मैन्युअल कॉन्फ़िगरेशन चाहिए।
package main
import (
"fmt"
"io"
"net/http"
"time"
)
func main() {
client := &http.Client{
Timeout: 10 * time.Second,
Transport: &http.Transport{
MaxIdleConns: 100,
MaxIdleConnsPerHost: 20,
IdleConnTimeout: 60 * time.Second,
},
}
resp, err := client.Get("https://api.example.com/data")
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
फायदे: जीरो डिपेंडेंसी, पूरा कंट्रोल, HTTP/2 का बिल्ट-इन सपोर्ट। नुकसान: ऑटोमैटिक रीट्राई और JSON के लिए सुविधाजनक तरीकों की कमी।
2. Resty — Go के लिए शानदार HTTP क्लाइंट
Resty (github.com/go-resty/resty/v2) सबसे लोकप्रिय लाइब्रेरी में से एक है। यह फ्लूएंट इंटरफेस, ऑटोमैटिक JSON सीरियलाइज़ेशन/डी-सीरियलाइज़ेशन, बिल्ट-इन रीट्राई और मिडलवेयर देती है।
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.SetRetryCount(3).SetRetryWaitTime(2)
var user User
resp, err := client.R().
SetHeader("Accept", "application/json").
SetResult(&user).
Get("https://jsonplaceholder.typicode.com/users/1")
if err != nil {
panic(err)
}
fmt.Printf("Status: %d, User: %+v\n", resp.StatusCode(), user)
}
Resty सपोर्ट करती है: ऑटोमैटिक रीट्राई (एक्सपोनेंशियल डिले के साथ), चेन कॉल, बिल्ट-इन लॉगर, multipart/form-data। REST API के लिए बेहतरीन है।
3. FastHTTP — अधिकतम परफॉर्मेंस
github.com/valyala/fasthttp लाइब्रेरी एक्सट्रीम स्पीड के लिए बनाई गई है। यह HTTP प्रोटोकॉल को स्क्रैच से रीडिज़ाइन करती है, ऑब्जेक्ट पूल का उपयोग करती है और एलोकेशन से बचती है। FastHTTP स्टैंडर्ड क्लाइंट से 5-10 गुना तेज़ हो सकती है।
package main
import (
"fmt"
"github.com/valyala/fasthttp"
)
func main() {
url := "https://httpbin.org/get"
statusCode, body, err := fasthttp.Get(nil, url)
if err != nil {
panic(err)
}
fmt.Printf("Status: %d\n", statusCode)
fmt.Printf("Body: %s\n", body)
}
ज़रूरी: FastHTTP HTTP/2 सपोर्ट नहीं करती और इसका API थोड़ा अलग है। इसे हाई-लोड माइक्रोसर्विसेज़ में उपयोग करें जहाँ हर माइक्रोसेकंड मायने रखता है।
4. Gentee HTTP — लचीलापन और मॉड्यूलरिटी
Gentee (github.com/gentee/gentee) कम ज्ञात लेकिन दिलचस्प लाइब्रेरी है जो मॉड्यूलर अप्रोच देती है। यह अलग-अलग ट्रांसपोर्ट, कोडेक और एरर हैंडलर को कॉम्बाइन करने की सुविधा देती है।
package main
import (
"context"
"fmt"
"github.com/gentee/gentee/http"
)
func main() {
client := http.NewClient()
req := http.NewRequest("GET", "https://api.example.com").
WithHeader("Authorization", "Bearer token")
resp, err := client.Do(context.Background(), req)
if err != nil {
panic(err)
}