परिचय: आपके प्रोजेक्ट को API Gateway की आवश्यकता क्यों है?
\n\nकल्पना करें: आप TypeScript में एक स्टार्टअप या कॉर्पोरेट एप्लिकेशन लिख रहे हैं। आपके पास पहले से ही उपयोगकर्ता सेवा, ऑर्डर सेवा और सूचना सेवा है। उनमें से प्रत्येक अपने स्वयं के पोर्ट (या यहां तक कि अपने स्वयं के सर्वर) पर रहता है, HTTP के माध्यम से संचार करता है, अपने स्वयं के डेटाबेस का उपयोग करता है। सब कुछ काम करता है, लेकिन क्लाइंट (फ्रंटएंड, मोबाइल एप्लिकेशन) संघर्ष करने लगता है: प्रोफ़ाइल पेज को इकट्ठा करने के लिए, उसे विभिन्न सेवाओं से 4-5 अनुरोध करने होंगे, विभिन्न त्रुटि प्रारूपों से निपटना होगा, और प्रत्येक में प्रमाणित भी होना होगा।
\n\nयहाँ API Gateway दृश्य में आता है — सभी क्लाइंट के लिए एक एकीकृत प्रवेश बिंदु। यह रूटिंग, प्रमाणीकरण, डेटा एकत्रीकरण, कैशिंग और यहां तक कि प्रतिक्रिया परिवर्तन का ध्यान रखता है। इस लेख में, हम शुरू से TypeScript में एक वास्तविक API Gateway लिखेंगे, पैटर्न और एंटी-पैटर्न को समझेंगे, और दिखाएंगे कि गलतियों से कैसे बचा जाए।
\n\nसरल शब्दों में API Gateway क्या है
\n\nAPI Gateway क्लाइंट और आपकी आंतरिक सेवाओं के बीच एक मध्यवर्ती परत है। क्लाइंट (ब्राउज़र, मोबाइल, बाहरी API) केवल Gateway पर दस्तक देता है। Gateway अनुरोध पथ को देखता है, टोकन की जांच करता है, और अनुरोध को उपयुक्त माइक्रोसर्विस पर रीडायरेक्ट करता है। कभी-कभी यह कई सेवाओं से प्रतिक्रिया को एक में भी एकत्रित करता है — इसे एकत्रीकरण कहा जाता है।
\n\nTypeScript इकोसिस्टम में इसकी आवश्यकता क्यों है? क्योंकि TypeScript हमें प्रकार, इंटरफ़ेस और कठोरता प्रदान करता है, और Gateway सत्यापन और डेटा को एक समान अनुबंध में लाने के लिए एक आदर्श स्थान है।
\n\nआर्किटेक्चर: यह TypeScript पर कैसे काम करता है
\n\nआइए एक सरल लेकिन कार्यात्मक आर्किटेक्चर डिज़ाइन करें। हमारे पास होगा:
\n\n- \n
- Gateway (हमारी TypeScript सेवा) — पोर्ट 3000, एकमात्र प्रवेश बिंदु। \n
- उपयोगकर्ता सेवा (User Service) — पोर्ट 4001, REST API। \n
- ऑर्डर सेवा (Order Service) — पोर्ट 4002, REST API। \n
- सूचना सेवा (Notification Service) — पोर्ट 4003, REST API। \n
सभी आंतरिक सेवाएं अपने स्वयं के नेटवर्क (जैसे, Docker network) में रहती हैं और बाहर से दिखाई नहीं देती हैं। क्लाइंट केवल Gateway के साथ संचार करता है।
\n\n// प्रोजेक्ट संरचना\ngateway/\n├── src/\n│ ├── routes/\n│ │ ├── userRoutes.ts\n│ │ ├── orderRoutes.ts\n│ │ └── notificationRoutes.ts\n│ ├── middleware/\n│ │ ├── authMiddleware.ts\n│ │ ├── rateLimiter.ts\n│ │ └── cacheMiddleware.ts\n│ ├── services/\n│ │ └── proxyService.ts\n│ ├── types/\n│ │ └── index.ts\n│ └── index.ts\n├── package.json\n└── tsconfig.json\n\n\nTypeScript पर बेसिक API Gateway लिखना
\n\nआइए निर्भरताएं स्थापित करके शुरू करें। हमें Express (सबसे लोकप्रिय फ्रेमवर्क), प्रॉक्सी के लिए http-proxy-middleware, और कुछ उपयोगिताओं की आवश्यकता होगी।
\n\nnpm init -y\nnpm install express http-proxy-middleware cors helmet express-rate-limit\nnpm install -D typescript @types/node @types/express ts-node nodemon\n\n\nआइए tsconfig.json बनाएं:
{\n "compilerOptions": {\n "target": "ES2020",\n "module": "commonjs",\n "outDir": "./dist",\n "rootDir": "./src",\n "strict": true,\n "esModuleInterop": true,\n "skipLibCheck": true,\n "forceConsistentCasingInFileNames": true\n },\n "include": ["src/**/*"],\n "exclude": ["node_modules"]\n}\n\n\nअब मुख्य फ़ाइल src/index.ts लिखते हैं:
import express, { Request, Response } from 'express';\nimport cors from 'cors';\nimport helmet from 'helmet';\nimport { createProxyMiddleware } from 'http-proxy-middleware';\nimport { authMiddleware } from './middleware/authMiddleware';\nimport { rateLimiter } from './middleware/rateLimiter';\n\nconst app = express();\nconst PORT = process.env.PORT || 3000;\n\n// ग्लोबल middleware\napp.use(helmet());\napp.use(cors());\napp.use(express.json());\napp.use(rateLimiter);\n\n// उपयोगकर्ता सेवा के लिए प्रॉक्सी\napp.use('/api/users', auth