Kotlin सेवाओं के लिए API Gateway: जब एक प्रवेश द्वार हज़ारों से बेहतर हो
\n\nकल्पना करें कि Kotlin पर आपका माइक्रोसर्विस चिड़ियाघर 20+ सेवाओं तक फैल गया है। उनमें से प्रत्येक अपने पोर्ट के माध्यम से दुनिया से जुड़ता है, अपने स्वयं के प्रमाणीकरण की आवश्यकता होती है, और अपने तरीके से त्रुटियों को संभालता है। क्लाइंट एंडपॉइंट्स में भ्रमित हो जाते हैं, और आप हर रात प्रार्थना करते हैं कि कोई अतिरिक्त सेवा डाउन न हो और पूरे एप्लिकेशन को अपने साथ न ले जाए। परिचित लगता है?
\n\nएक समाधान है — API Gateway। यह एक एकल प्रवेश बिंदु है जो रूटिंग, सुरक्षा, कैशिंग और मॉनिटरिंग का ध्यान रखता है। आज हम दो लोकप्रिय दृष्टिकोणों का उपयोग करके Kotlin पर ऐसा गेटवे बनाने पर चर्चा करेंगे: हल्का Ktor और औद्योगिक Spring Cloud Gateway। कोई फालतू बात नहीं — केवल कोड और अभ्यास।
\n\nAPI Gateway क्या है और आपको इसकी आवश्यकता क्यों है?
\n\nAPI Gateway (API गेटवे) क्लाइंट और आपकी माइक्रोसर्विसेज़ के बीच एक मध्यवर्ती परत है। प्रत्येक फ्रंटएंड या बाहरी एप्लिकेशन को आपकी सभी सेवाओं के पते जानने के बजाय, वे केवल गेटवे के साथ संवाद करते हैं। और यह तय करता है कि अनुरोध कहाँ भेजना है।
\n\nगेटवे के मुख्य कार्य:
\n- \n
- रूटिंग — URL या हेडर के आधार पर अनुरोधों को उपयुक्त सेवाओं पर निर्देशित करता है। \n
- प्रमाणीकरण और प्राधिकरण — अनुरोध को व्यावसायिक तर्क में जाने से पहले टोकन की जाँच करता है। \n
- लोड बैलेंसिंग — एक ही सेवा के इंस्टेंस के बीच अनुरोधों को वितरित करता है। \n
- कैशिंग — बार-बार अनुरोधित डेटा के लिए प्रतिक्रियाओं को संग्रहीत करता है। \n
- मॉनिटरिंग और लॉगिंग — एक ही स्थान पर सभी अनुरोधों के लिए मीट्रिक एकत्र करता है। \n
- Rate limiting — DDoS और ओवरलोड से बचाता है। \n
यदि आप Kotlin में लिख रहे हैं और माइक्रोसर्विस आर्किटेक्चर का उपयोग कर रहे हैं, तो API Gateway एक must-have है, कोई विकल्प नहीं। इसके बिना, आप बिखरे हुए एंडपॉइंट्स और सुरक्षा समस्याओं से अराजकता का जोखिम उठाते हैं।
\n\nदृष्टिकोण 1: Ktor पर API Gateway — हल्कापन और लचीलापन
\n\nKtor JetBrains द्वारा एक फ्रेमवर्क है, जो विशेष रूप से Kotlin के लिए बनाया गया है। यह एसिंक्रोनस, हल्का है और गेटवे लिखने के लिए आदर्श है जब आप भारी Spring Boot को शामिल नहीं करना चाहते।
\n\nआइए Ktor पर एक सरल API Gateway लिखें जो दो सेवाओं के लिए अनुरोधों को रूट करता है: user-service (उपयोगकर्ता) और order-service (ऑर्डर)।
चरण 1: प्रोजेक्ट सेटअप
\n\nstart.ktor.io के माध्यम से एक नया Ktor प्रोजेक्ट बनाएं या build.gradle.kts में मैन्युअल रूप से निर्भरताएँ जोड़ें:
dependencies {\n implementation("io.ktor:ktor-server-core:2.3.7")\n implementation("io.ktor:ktor-server-netty:2.3.7")\n implementation("io.ktor:ktor-client-core:2.3.7")\n implementation("io.ktor:ktor-client-cio:2.3.7")\n implementation("io.ktor:ktor-server-auth:2.3.7")\n implementation("io.ktor:ktor-server-content-negotiation:2.3.7")\n implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.7")\n implementation("ch.qos.logback:logback-classic:1.4.14")\n}\n\nचरण 2: प्रॉक्सी के साथ बेसिक रूटिंग
\n\nमुख्य फ़ाइल Application.kt बनाएं:
import io.ktor.client.*\nimport io.ktor.client.request.*\nimport io.ktor.client.statement.*\nimport io.ktor.http.*\nimport io.ktor.server.application.*\nimport io.ktor.server.engine.*\nimport io.ktor.server.netty.*\nimport io.ktor.server.response.*\nimport io.ktor.server.routing.*\n\nfun main() {\n embeddedServer(Netty, port = 8080) {\n module()\n }.start(wait = true)\n}\n\nfun Application.module() {\n val httpClient = HttpClient()\n\n routing {\n // user-service के लिए प्रॉक्सी\n route("/api/users") {\n handle {\n val response = httpClient.get("http://localhost:8081${call.request.uri}")\n call.respondText(\n text