Swift सर्विसेज के लिए API Gateway: माइक्रोसर्विसेज के बीच पुल बनाना
\n\nकल्पना करें कि आपका backend एक बड़ा शॉपिंग मॉल है। अंदर दर्जनों दुकानें (माइक्रोसर्विसेज) हैं: लॉगिन, प्रोडक्ट कैटलॉग, कार्ट, पेमेंट, नोटिफिकेशन। क्लाइंट (iOS ऐप) को हर दुकान में अलग-अलग जाना पड़े - यह अव्यवस्थित, धीमा और असुरक्षित है। API Gateway एक ही जगह पर मुख्य द्वार, सुरक्षा और नेविगेटर का काम करता है। यह रिक्वेस्ट लेता है, पास चेक करता है, सही विभाग में भेजता है और रिजल्ट लौटाता है।
\n\nSwift की दुनिया में, जहाँ Vapor और Hummingbird तेज़ी से लोकप्रिय हो रहे हैं, अपना खुद का API Gateway बनाना बड़े प्रोजेक्ट्स के लिए ज़रूरी है। आज हम सीखेंगे कि Swift में एक हल्का gateway कैसे बनाएं जो आपकी सर्विसेज को एक इकोसिस्टम में जोड़े।
\n\nSwift आर्किटेक्चर में API Gateway क्यों ज़रूरी है?
\n\nजब आपके पास 2-3 माइक्रोसर्विसेज हों, तो क्लाइंट सीधे बात कर सकता है। लेकिन जब 10+ हों (फिनटेक, e-commerce या SaaS में आम), तो समस्याएँ आती हैं:
\n\n- \n
- भारी क्लाइंट कोड - हर सर्विस का अपना endpoint, error format और auth प्रोटोकॉल \n
- सुरक्षा कमज़ोरियाँ - हर सर्विस को खुद CORS, rate limiting और JWT चेक करना पड़ता है \n
- रीफैक्टरिंग में मुश्किल - सर्विस का नाम बदला? सभी क्लाइंट का कोड बदलना होगा
- अनावश्यक ट्रैफ़िक - एक पेज लोड करने के लिए क्लाइंट 5 रिक्वेस्ट करता है
API Gateway इन समस्याओं को हल करता है और एक ही एंट्री पॉइंट बन जाता है। यह कई माइक्रोसर्विसेज से डेटा इकट्ठा करके एक जवाब दे सकता है, सुरक्षा नीतियाँ लागू कर सकता है और सभी रिक्वेस्ट को लॉग कर सकता है। Swift डेवलपर्स के लिए, यह गेटवे लेवल पर भाषा की सख्त टाइपिंग का उपयोग करने का मौका है।
\n\nटूल चुनना: Vapor + Hummingbird
\n\nSwift में API Gateway बनाने के लिए Vapor सबसे अच्छा है - यह इकोसिस्टम का सबसे परिपक्व वेब फ्रेमवर्क है। इसमें middleware, रूटिंग, क्लाइंट रिक्वेस्ट (Client के ज़रिए) और async/await सपोर्ट है। विकल्प Hummingbird (हल्का, तेज़, Apple का) है, लेकिन उदाहरण के लिए हम Vapor का उपयोग करेंगे क्योंकि इसके डॉक्यूमेंटेशन बेहतर हैं।
हमारा gateway तीन काम करेगा:
\n- \n
- रिक्वेस्ट को सही माइक्रोसर्विस पर भेजना (प्रॉक्सी) \n
- JWT के ज़रिए ऑथेंटिकेशन \n
- दो सर्विसेज से डेटा जोड़कर एक जवाब देना (एग्रीगेशन) \n
चरण 1. बेसिक प्रोजेक्ट स्ट्रक्चर
\n\nनया Vapor प्रोजेक्ट बनाएँ:
\nvapor new APIGateway --template=api\ncd APIGateway\n\nPackage.swift में JWT के लिए डिपेंडेंसी जोड़ें:
.package(url: "https://github.com/vapor/jwt.git", from: "4.0.0")\n\nऔर target में शामिल करें:
\n.target(name: "App", dependencies: [\n .product(name: "Vapor", package: "vapor"),\n .product(name: "JWT", package: "jwt")\n])\n\nचरण 2. ऑथेंटिकेशन के लिए Middleware
\n\nएक middleware बनाएँ जो JWT टोकन चेक करे और यूज़र की जानकारी आगे भेजे। Swift में API Gateway का यह क्लासिक पैटर्न है:
\n\nimport Vapor\nimport JWT\n\nstruct JWTAuthenticator: AsyncMiddleware {\n func respond(to request: Request, chainingTo next: AsyncResponder) async throws -> Response {\n guard let token = request.headers.bearerAuthorization?.token else {\n throw Abort(.unauthorized, reason: "Bearer टोकन नहीं मिला")\n }\n \n // सिग्नेचर और एक्सपायरी चेक करें\n let payload = try await request.jwt.verify(token, as: UserPayload.self)\n \n // यूज़र को रिक्वेस्ट स्टोरेज में सेव करें\n request.storage.set(UserPayloadKey.self, to: payload)\n \n return try await next.respond(to: request)\n }\n}\n\nstruct UserPayload: JWTPayload {\n var userID: UUID\n var role: String\n var exp: ExpirationClaim\n \n func verify(using signer: JWTSigner) throws {\n