API Gateway के साथ अपने GraphQL API को कुशलतापूर्वक प्रबंधित करें
March 21, 2023
GraphQL एक शक्तिशाली API के लिए क्वेरी भाषा है जो डेवलपर्स को सर्वर से आवश्यक डेटा की संरचना को परिभाषित करने की अनुमति देती है, और सर्वर केवल उसी डेटा के साथ प्रतिक्रिया करता है। यह इसे पारंपरिक REST APIs की तुलना में अधिक कुशल और लचीला बनाता है, जिन्हें अक्सर समान डेटा को पुनः प्राप्त करने के लिए कई अनुरोधों की आवश्यकता होती है। हालांकि, GraphQL APIs का प्रबंधन जटिल और समय लेने वाला हो सकता है, खासकर बड़े पैमाने पर। यहीं पर एक API Gateway काम आता है।
Apache APISIX जैसे आधुनिक API Gateways की एक प्रमुख विशेषता इसका GraphQL APIs के लिए समर्थन है। APISIX अपने लचीले कॉन्फ़िगरेशन सिस्टम और शक्तिशाली प्लगइन्स का उपयोग करके GraphQL APIs को प्रबंधित और स्केल करना आसान बनाता है। ऐसा ही एक प्लगइन degrapghql प्लगइन है, जो हमें GraphQL API को REST API में बदलने की अनुमति देता है। इस पोस्ट में, हम एक उदाहरण के साथ इस सुविधा का पता लगाएंगे।
सीखने के उद्देश्य
आप इस लेख के माध्यम से निम्नलिखित प्रश्नों के उत्तर जानेंगे और खोजेंगे:
- DeGraphQL प्लगइन क्या है?
- DeGraphQL प्लगइन के उपयोग के मामले और विशेषताएं क्या हैं?
- DeGraphQL प्लगइन का उपयोग कैसे करें।
- REST को GraphQL में कैसे बदलें?
- GraphQL API ट्रैफ़िक को कैसे प्रबंधित करें?

DeGraphQL प्लगइन का उपयोग क्यों करें?
यह प्लगइन GraphQL अपस्ट्रीम (बैकएंड सेवा) द्वारा एक्सपोज़ किए गए APIs को पारंपरिक REST एंडपॉइंट में बदलने में सक्षम है, URI को GraphQL क्वेरीज़ में मैप करके। एक सामान्य क्लाइंट से REST APIs को कॉल करने से GraphQL के लाभ अधिक लोगों के लिए खुल जाते हैं, निम्नलिखित उपयोग के मामलों पर विचार करें:
उपयोग केस 1: आपके मौजूदा ग्राहक REST APIs का उपयोग करने के आदी हैं और GraphQL क्वेरीज़ लिखने के तरीके से परिचित नहीं हैं। उनके लिए चीजों को सरल रखने के लिए, आप Apache APISIX API Gateway का उपयोग करके GraphQL API को REST API में बदल सकते हैं।
उपयोग केस 2: आप एक फ्रंट-एंड डेवलपमेंट टीम में हैं जो मौजूदा GraphQL API कार्यक्षमताओं को आज़माना चाहती है बिना बैकएंड टीम से नया GraphQL सर्वर लागू करने के लिए कहें।
उपयोग केस 3: आपके पास बैकएंड को बदलने की पहुंच नहीं है क्योंकि यह मौजूदा GraphQL APIs का एक सेट है, संभवतः किसी तीसरे पक्ष द्वारा प्रबंधित।
उपयोग केस 4: आपके पास मौजूदा REST API इंफ्रास्ट्रक्चर है, लेकिन आप यह मूल्यांकन करना चाहते हैं कि क्या GraphQL आपकी आवश्यकताओं के लिए काम कर सकता है।
उपयोग केस 5: आपके पास एक बड़ा कोडबेस है, और GraphQL माइग्रेशन बैकएंड पर हो रहा है, लेकिन आप इंतजार किए बिना अभी GraphQL का उपयोग करना चाहते हैं।
उपयोग केस 6: आपके पास कई माइक्रोसर्विसेज़ हैं और वे दोनों दृष्टिकोणों का संयोजन उपयोग करते हैं। आप उनके बीच सहज संचार सक्षम करना चाहते हैं।
DeGraphQL प्लगइन की विशेषताएं क्या हैं?
DeGraphQL प्लगइन कई उपयोगी विशेषताएं प्रदान करता है जो आपके GraphQL API को कॉन्फ़िगर और प्रबंधित करना आसान बनाता है, जिनमें शामिल हैं:
अनुरोध सत्यापन: यह आने वाले GraphQL अनुरोधों को सत्यापित कर सकता है ताकि यह सुनिश्चित हो सके कि वे कुछ मानदंडों को पूरा करते हैं। इसमें क्वेरी की संरचना की जांच, इनपुट प्रकार की बाधाओं को लागू करना, और अधिक शामिल हो सकता है। अनुरोधों को सत्यापित करके, आप यह सुनिश्चित कर सकते हैं कि आपका API हमेशा वैध और अच्छी तरह से बनाए गए अनुरोध प्राप्त कर रहा है।
क्वेरी पार्सिंग: यह GraphQL क्वेरीज़ को पार्स भी कर सकता है, जिससे आप क्वेरी से विशिष्ट जानकारी निकाल सकते हैं और इसे अपने API के व्यवहार को सूचित करने के लिए उपयोग कर सकते हैं। इसमें अनुरोधित डेटा के आधार पर उपयुक्त बैकएंड सेवा का चयन करना, या कुछ क्वेरी पैरामीटर्स के आधार पर प्रतिक्रिया को संशोधित करना शामिल हो सकता है।
प्रतिक्रिया परिवर्तन: अंत में, यह GraphQL प्रतिक्रियाओं को क्लाइंट को वापस भेजने से पहले परिवर्तित कर सकता है। यह डेटा संरचनाओं को सामान्य बनाने, संवेदनशील जानकारी को हटाने, या प्रतिक्रिया में अतिरिक्त डेटा जोड़ने के लिए उपयोगी हो सकता है।
इस क्षमता के साथ, Apache APISIX न केवल REST और GraphQL को एक साथ उपयोग करना आसान बनाता है, बल्कि आप दर सीमाएं परिभाषित कर सकते हैं, प्रमाणीकरण और प्राधिकरण लागू कर सकते हैं, API का दुरुपयोग करने का प्रयास करने वाले क्लाइंट्स को ब्लॉक कर सकते हैं, और अन्य अंतर्निहित प्लगइन्स की मदद से APIs को सहज रूप से काम करने के लिए सुनिश्चित कर सकते हैं।
DeGraphQL प्लगइन का उपयोग कैसे करें (डेमो)
पर्याप्त सैद्धांतिक ज्ञान के साथ, अब हम DeGraphQL प्लगइन के एक व्यावहारिक डेमो में कूद सकते हैं। DeGraphQL को क्वेरी करने के लिए एक GraphQL एंडपॉइंट की आवश्यकता होती है। एक उदाहरण के रूप में, हम एक मुफ्त सार्वजनिक GraphQL API का उपयोग करने जा रहे हैं जो देशों, महाद्वीपों और भाषाओं के बारे में जानकारी प्राप्त करता है https://countries.trevorblades.com/।
यदि आप उपरोक्त Countries API लिंक पर नेविगेट करते हैं, तो यह एक प्लेग्राउंड खोलेगा जहां आप UI पर GraphQL API के खिलाफ कुछ क्वेरीज़ लिख सकते हैं।

आप StepZen या ApollographQL द्वारा प्रदान किए गए GraphQL स्टूडियो का उपयोग करके अपना खुद का GraphQL API भी बना सकते हैं जो आपको Accuweather, Airtable, GitHub, Twitter, Trello, और अधिक जैसे पूर्वनिर्मित APIs को संयोजित करके अपना खुद का GraphQL API बनाने और तैनात करने में मदद करता है। उदाहरण के लिए, आप दो Accuteweather और Countries APIs को एक साथ संयोजित कर सकते हैं ताकि एक देश/शहर के नाम द्वारा प्रदान की गई मौसम की जानकारी एकत्र कर सकें और APISIX को सामने रखकर REST से API को क्वेरी कर सकें।
अब हमारा कार्य उपरोक्त क्वेरी परिभाषा को एक सरल REST कॉल में बदलना है और इसे JSON डेटा के रूप में भेजना है। परिणामस्वरूप, Apache APISIX API Gateway REST एंडपॉइंट को एक्सपोज़ करता है और सभी अनुरोधों को GraphQL API पर रूट करने में सक्षम होना चाहिए।
उदाहरण के लिए, API Gateway के /country-info URI पथ के सभी REST अनुरोधों को एक देश कोड द्वारा अंतर्निहित क्वेरी के साथ परिवर्तित और GraphQL countries API https://countries.trevorblades.com/graphql पर पास किया जाना चाहिए।
एक उदाहरण curl कमांड जो कुछ इस तरह दिखता है:
curl -i http://127.0.0.1:9080/country-info -X POST -d \ '{ "code": "EE" }'
और हमें API से निम्नलिखित प्रतिक्रिया मिलनी चाहिए:
{ "data": { "country": { "code": "EE", "capital": "Tallinn", "currency": "EUR", "languages": [ { "name": "Estonian" } ] } } }
अगले भागों में, हम इसे चरण-दर-चरण कैसे प्राप्त करें, यह सीखेंगे।
आइए Apache APISIX को चालू करें
DeGraphQL प्लगइन का उपयोग करने से पहले, आपको Apache APISIX स्थापित करने की आवश्यकता होगी। आप Apache APISIX वेबसाइट पर स्थापना निर्देश का पालन करके शुरू कर सकते हैं।
पूर्वापेक्षाएँ
- Docker का उपयोग कंटेनराइज़्ड etcd और APISIX स्थापित करने के लिए किया जाता है।
- curl का उपयोग APISIX को अनुरोध भेजने के लिए किया जाता है। आप API के साथ इंटरैक्ट करने के लिए Postman जैसे आसान टूल्स का भी उपयोग कर सकते हैं।
APISIX को निम्नलिखित क्विकस्टार्ट स्क्रिप्ट के साथ आसानी से स्थापित और शुरू किया जा सकता है:
curl -sL https://run.api7.ai/apisix/quickstart | sh
यह दो Docker कंटेनर बनाएगा – एक etcd कॉन्फ़िगरेशन स्टोर करने के लिए और APISIX Gateway स्वयं। एक बार जब आप "✔ APISIX is ready!" संदेश देखें, तो हम APISIX के Admin API के माध्यम से एक अपस्ट्रीम, प्लगइन और रूट कॉन्फ़िगर कर सकते हैं जो GraphQL API को अनुरोध प्रॉक्सी करता है।
एक अपस्ट्रीम बनाएं
अगला, हम एक अपस्ट्रीम ऑब्जेक्ट बनाएंगे ताकि हमारे Countries GrapghQL API को API Gateway में पंजीकृत कर सकें:
curl "http://127.0.0.1:9180/apisix/admin/upstreams/1" -X PUT -d ' { "name": "GraphQL API upstream", "desc": "Register Countries GraphQL API as the upstream", "type": "roundrobin", "scheme": "https", "nodes": { "countries.trevorblades.com": 1 } }'
एक प्लगइन कॉन्फ़िग बनाएं
अगला, एक नया प्लगइन कॉन्फ़िग ऑब्जेक्ट सेट अप करें। हम दो परिवर्तन प्लगइन्स proxy-rewrite और degraphql का उपयोग करेंगे ताकि अनुरोध के होस्ट और URI को फिर से लिख सकें और क्रमशः GraphQL API को क्वेरी कर सकें।
curl http://127.0.0.1:9180/apisix/admin/plugin_configs/1 -X PUT -d ' { "plugins":{ "proxy-rewrite":{ "uri":"/graphql", "host":"countries.trevorblades.com" }, "degraphql":{ "query":"query Country($code: ID!) { country(code: $code) { code capital currency languages { name } } }", "variables":[ "code" ] } } }'
उपरोक्त DeGraphQL प्लगइन कॉन्फ़िगरेशन में, हमने दो विशेषताएं जैसे query और variables सेट की हैं। GraphQL क्वेरी वेरिएबल्स को REST कॉल में POST अनुरोध बॉडी या URIs पर परिभाषित किया जा सकता है।
इस मामले में हम जो क्वेरी निष्पादित कर रहे हैं, वह निम्नलिखित जैसी दिखती है और आप इसे अपने स्वयं के साथ बदल सकते हैं:
query ($code: ID!) { country(code: $code) { code capital currency languages { name } } }
DeGraphQL प्लगइन के साथ एक रूट बनाएं
इस चरण में एक नया रूट सेट अप करना शामिल है जो प्लगइन कॉन्फ़िग का उपयोग करता है, और रूट को अपस्ट्रीम के साथ काम करने के लिए कॉन्फ़िगर करना (उनके IDs का संदर्भ देकर) जो हमने पिछले चरणों में बनाया है:
curl -i http://127.0.0.1:9180/apisix/admin/routes/1 -X PUT -d ' { "name":"GraphQL API route", "desc":"Create a new route in APISIX for the Countries GraphQL API", "uri":"/country-info", "upstream_id":"1", "plugin_config_id":1 }'
DeGraphQL प्लगइन सक्रियण का परीक्षण करें
अब आइए इस नए सेटअप का निम्नलिखित curl कमांड के साथ परीक्षण करें।
curl -i http://127.0.0.1:9080/country-info -X POST -d \ '{ "code": "EE" }'
हमें APISIX से प्रतिक्रिया मिलेगी:
{ "data": { "country": { "code": "EE", "capital": "Tallinn", "currency": "EUR", "languages": [ { "name": "Estonian" } ] } } }
समान code वेरिएबल को GET तर्कों के रूप में भी प्रदान किया जा सकता है:
curl -i http://127.0.0.1:9080/country-info?code=EE
प्रतिक्रिया परिवर्तन
Apisix के response-rewrite प्लगइन की मदद से, GraphQL प्रतिक्रियाओं को क्लाइंट को वापस भेजने से पहले परिवर्तित करना संभव है। आइए इस प्लगइन का उपयोग करके प्रतिक्रिया JSON से currency कुंजी और मान को हटाकर केवल बाकी सब कुछ दिखाएं। ऐसा करने के लिए, हमें मौजूदा प्लगइन कॉन्फ़िगरेशन में response-rewrite प्लगइन जोड़ने की आवश्यकता है।
curl http://127.0.0.1:9180/apisix/admin/plugin_configs/1 -X PATCH -d ' { "plugins":{ "response-rewrite": { "filters":[ { "regex":"(?:\"currency\":\")(.*?)(?:\")", "scope":"once", "replace":"" } ], "vars":[ [ "status", "==", 200 ] ] } } }'
इस प्लगइन के स्थापित होने के बाद, आप /country-info को फिर से अनुरोध कर सकते हैं और परिवर्तित प्रतिक्रिया देख सकते हैं:
{ "data": { "country": { "code": "EE", "capital": "Tallinn", "languages": [ { "name": "Estonian" } ] } } }
सारांश
कुल मिलाकर, DeGraphQL प्लगइन APISIX के साथ GraphQL API बनाने वाले किसी भी डेवलपर के लिए एक आवश्यक टूल है। इसकी शक्तिशाली विशेषताएं और उपयोग में आसान कॉन्फ़िगरेशन इसे आपके मौजूदा API गेटवे में एकीकृत करना आसान बनाता है, जबकि GraphQL-विशिष्ट कार्यक्षमता के लिए समर्थन यह सुनिश्चित करता है कि आपका API प्रदर्शनकारी, विश्वसनीय और स्केलेबल है।