आपके प्रोजेक्ट को JavaScript पर API Gateway की आवश्यकता क्यों है?
\n\nकल्पना करें कि आपका backend एक विशाल शॉपिंग मॉल है। इसके अंदर दर्जनों दुकानें (माइक्रोसर्विसेज़) हैं: एक किताबें बेचता है, दूसरा कपड़े, तीसरा इलेक्ट्रॉनिक्स। प्रत्येक दुकान का अपना प्रवेश द्वार, अपने नियम और अपनी भाषा है। अब कल्पना करें कि एक आगंतुक (क्लाइंट एप्लिकेशन) को एक टी-शर्ट खरीदने के लिए इन सभी प्रवेश द्वारों पर जाना होगा। अराजकता, है ना?
\n\nवेब डेवलपमेंट की दुनिया में, इस समस्या को API Gateway हल करता है - सभी माइक्रोसर्विसेज़ के लिए एक एकल प्रवेश बिंदु। यह शॉपिंग मॉल के प्रशासक की तरह है: अनुरोधों को निर्देशित करता है, टिकट (टोकन) की जाँच करता है, विभिन्न दुकानों से डेटा एकत्र करता है और क्लाइंट को तैयार उत्तर देता है। और आज हम सीखेंगे कि Node.js का उपयोग करके शुद्ध JavaScript में ऐसा गेटवे कैसे लिखा जाए।
\n\nयह लेख उन शुरुआती लोगों के लिए उपयोगी होगा जो माइक्रोसर्विसेज़ आर्किटेक्चर से परिचित हो रहे हैं, साथ ही अनुभवी डेवलपर्स के लिए जो काम करने वाले कोड उदाहरण देखना चाहते हैं। चलिए शुरू करते हैं!
\n\nAPI Gateway क्या है और इसकी आवश्यकता क्यों है?
\n\nAPI Gateway एक सर्वर घटक है जो क्लाइंट और आंतरिक सेवाओं के बीच एक मध्यवर्ती परत के रूप में कार्य करता है। यह निम्नलिखित कार्य करता है:
\n- \n
- रूटिंग - अनुरोधों को उपयुक्त माइक्रोसर्विस पर निर्देशित करता है। \n
- प्रमाणीकरण और प्राधिकरण - जाँच करता है कि उपयोगकर्ता के पास पहुँच है या नहीं। \n
- डेटा एकत्रीकरण - कई सेवाओं से उत्तरों को एक में एकत्र करता है। \n
- अनुरोध सीमित करना - backend को ओवरलोड से बचाता है। \n
- प्रोटोकॉल रूपांतरण - उदाहरण के लिए, REST को GraphQL में बदलता है। \n
JavaScript सेवाओं (विशेषकर Node.js पर) के लिए, API Gateway एक स्वाभाविक विकल्प है। इसे Express, Koa या Fastify पर आसानी से लिखा जा सकता है, और मुख्य बात यह है कि यह पूरे प्रोजेक्ट में एक समान कोड शैली बनाए रखने की अनुमति देता है।
\n\nNode.js पर API Gateway की संरचना डिज़ाइन करना
\n\nकोड लिखने से पहले, आइए आर्किटेक्चर तय करें। मान लीजिए कि हमारे पास तीन माइक्रोसर्विसेज़ हैं:
\n- \n
users-service- उपयोगकर्ता प्रबंधन (पोर्ट 3001)। \n orders-service- ऑर्डर (पोर्ट 3002)। \n products-service- उत्पाद सूची (पोर्ट 3003)। \n
क्लाइंट (फ्रंटएंड) केवल पोर्ट 8080 पर Gateway से संपर्क करता है। Gateway स्वयं तय करता है कि अनुरोध कहाँ भेजना है।
\n\nचरण 1. Express की बुनियादी सेटिंग
\n\nएक नया प्रोजेक्ट बनाएँ और निर्भरताएँ स्थापित करें:
\nmkdir api-gateway\ncd api-gateway\nnpm init -y\nnpm install express http-proxy-middleware dotenv\n\nअब एक सरल Gateway लिखें जो सेवाओं के लिए अनुरोधों को प्रॉक्सी करता है:
\n// gateway.js\nconst express = require('express');\nconst { createProxyMiddleware } = require('http-proxy-middleware');\nrequire('dotenv').config();\n\nconst app = express();\nconst PORT = process.env.PORT || 8080;\n\n// माइक्रोसर्विसेज़ के लिए रूट\napp.use('/users', createProxyMiddleware({\n target: 'http://localhost:3001',\n changeOrigin: true,\n}));\n\napp.use('/orders', createProxyMiddleware({\n target: 'http://localhost:3002',\n changeOrigin: true,\n}));\n\napp.use('/products', createProxyMiddleware({\n target: 'http://localhost:3003',\n changeOrigin: true,\n}));\n\napp.listen(PORT, () => {\n console.log(`API Gateway पोर्ट ${PORT} पर शुरू हुआ`);\n});\n\nबस इतना ही! अब /users का कोई भी अनुरोध स्वचालित रूप से users-service पर रीडायरेक्ट हो जाता है। लेकिन यह केवल शुरुआत है। एक वास्तविक Gateway को और अधिक करना चाहिए।
प्रमाणीकरण और टोकन जाँच जोड़ना
\n\nAPI Gateway के मुख्य कार्यों में से एक केंद्रीकृत प्रमाणीकरण है। प्रत्येक माइक्रोसर्विस में JWT की जाँच करने के बजाय, हम इसे गेटवे में एक बार करते हैं।
\n\nटोकन जाँच के लिए middleware जोड़ें:
\n// middleware/auth.js\nconst jwt = require('jsonwebtoken');\n\nconst authMiddleware = (req, res, next) =>