परिचय: आपके Go प्रोजेक्ट को एक संचालक की आवश्यकता क्यों है
\n\nएक सिम्फनी ऑर्केस्ट्रा की कल्पना करें। आपके पास वायलिन (उपयोगकर्ता सेवा), वुडविंड (ऑर्डर सेवा), पर्कशन (भुगतान सेवा) हैं। प्रत्येक वाद्य अपने आप में सुंदर है, लेकिन एक संचालक के बिना वे असंगत बजेंगे। Go पर माइक्रोसर्विसेज की दुनिया में API गेटवे वही संचालक है।
\n\nजब आप Go में लिखते हैं, तो आप प्रदर्शन, सरलता और सुंदरता के आदी होते हैं। लेकिन जैसे ही सेवाओं की संख्या 3-4 से अधिक हो जाती है, अराजकता शुरू हो जाती है: क्लाइंट नहीं जानते कि कहाँ जाएँ, प्रमाणीकरण हर सेवा में दोहराया जाता है, और निगरानी सिरदर्द बन जाती है। Go सेवाओं के लिए API गेटवे इन समस्याओं को एक साथ हल करता है।
\n\nइस लेख में, हम केवल सिद्धांत के बारे में बात नहीं करेंगे। हम Go, मानक लाइब्रेरी और कुछ लोकप्रिय पैकेज लेंगे, और अपना खुद का गेटवे बनाएंगे। संचालन के लिए तैयार हैं? चलिए शुरू करते हैं!
\n\nAPI गेटवे क्या है और Go में इसकी आवश्यकता क्यों है?
\n\nAPI गेटवे आपकी बैकएंड सेवाओं के लिए सभी क्लाइंट अनुरोधों का एक एकल प्रवेश बिंदु है। कल्पना करें कि आपके पास है:
\n\n- \n
user-service:8081— पंजीकरण और प्रोफाइल \norder-service:8082— कार्ट और ऑर्डर \npayment-service:8083— लेन-देन \n
गेटवे के बिना, क्लाइंट को तीनों सेवाओं के पते पता होने चाहिए। Go पर API गेटवे के साथ, वह केवल api.example.com पर दस्तक देता है, और गेटवे स्वयं तय करता है कि अनुरोध कहाँ भेजना है।
गेटवे के मुख्य कार्य
\n\n- \n
- रूटिंग — अनुरोधों को उपयुक्त सेवा पर रीडायरेक्ट करना \n
- प्रमाणीकरण और प्राधिकरण — एक स्थान पर JWT टोकन की जाँच \n
- रेट लिमिटिंग — DDoS और ओवरलोड से सुरक्षा \n
- डेटा एकत्रीकरण — कई सेवाओं से प्रतिक्रियाओं को एक में संकलित करना \n
- लोड बैलेंसिंग — इंस्टेंस के बीच अनुरोधों का वितरण \n
Go इस भूमिका के लिए आदर्श है: यह हल्का, तेज़ है और एक कोर पर प्रति सेकंड हजारों अनुरोधों को संसाधित कर सकता है।
\n\nGo पर एक सरल API गेटवे लिखना: विचार से कोड तक
\n\nआइए एक न्यूनतम लेकिन कार्यात्मक Go API गेटवे बनाएं। हम केवल मानक लाइब्रेरी net/http और प्रॉक्सी के लिए httputil.ReverseProxy पैकेज का उपयोग करेंगे।
चरण 1: बुनियादी रूटिंग
\n\nसरल से शुरू करें: पथ के आधार पर अनुरोधों को विभिन्न सेवाओं पर निर्देशित करें।
\n\npackage main\n\nimport (\n "log"\n "net/http"\n "net/http/httputil"\n "net/url"\n)\n\nfunc main() {\n // उपयोगकर्ता सेवा\n userServiceURL, _ := url.Parse("http://localhost:8081")\n userProxy := httputil.NewSingleHostReverseProxy(userServiceURL)\n\n // ऑर्डर सेवा\n orderServiceURL, _ := url.Parse("http://localhost:8082")\n orderProxy := httputil.NewSingleHostReverseProxy(orderServiceURL)\n\n http.HandleFunc("/api/users/", func(w http.ResponseWriter, r *http.Request) {\n log.Printf("user-service को अनुरोध रीडायरेक्ट कर रहे हैं: %s", r.URL.Path)\n userProxy.ServeHTTP(w, r)\n })\n\n http.HandleFunc("/api/orders/", func(w http.ResponseWriter, r *http.Request) {\n log.Printf("order-service को अनुरोध रीडायरेक्ट कर रहे हैं: %s", r.URL.Path)\n orderProxy.ServeHTTP(w, r)\n })\n\n log.Println("API गेटवे :8080 पर शुरू हुआ")\n log.Fatal(http.ListenAndServe(":8080", nil))\n}\n\n\nयह कोड पहले से ही 80% काम करता है: /api/users/ का कोई भी अनुरोध user-service पर जाता है, और /api/orders/ का order-service पर। लेकिन प्रमाणीकरण कहाँ है?
चरण 2: JWT के लिए मिडलवेयर जोड़ना
\n\nGo पर API गेटवे की असली जादू मिडलवेयर में होती है। आइए प्रॉक्सी करने से पहले JWT टोकन की जाँच जोड़ें।
\n\npackage main\n\nimport (\n "context"\n "log"\n "net/http"\n "net/http/htt