जब आप एक एपीआई का निर्माण कर रहे हों तो ग्राफकलाइन क्लासिक रेस्ट दृष्टिकोण के लिए एक लचीला विकल्प प्रदान करता है।

किसी एप्लिकेशन को डिज़ाइन करते समय विचार करने के लिए सबसे महत्वपूर्ण कारकों में से एक एपीआई आर्किटेक्चर का उपयोग करने का प्रकार है। कुशल एपीआई डिज़ाइन यह सुनिश्चित करने के लिए महत्वपूर्ण है कि ऐप्स अपने पूरे जीवनचक्र में प्रदर्शन कर रहे हैं।

रेस्टफुल आर्किटेक्चर सबसे लोकप्रिय दृष्टिकोण है, लेकिन इसमें एक महत्वपूर्ण कमी है: एक निश्चित समापन बिंदु संरचना जो पूर्व निर्धारित डेटा लौटाती है। इस डिजाइन के परिणामस्वरूप अक्षम संचार हो सकता है।

इसके विपरीत, ग्राफ़क्यूएल-आरईएसटी का एक विकल्प- आपको केवल आपके लिए आवश्यक डेटा का अनुरोध करने की अनुमति देकर अधिक लचीलापन प्रदान करता है।

ग्राफक्यूएल एपीआई क्या हैं?

ग्राफक्यूएल एक क्वेरी भाषा है जिसका उपयोग आप बैकएंड एपीआई (एप्लिकेशन प्रोग्रामिंग इंटरफेस) लिखने के लिए कर सकते हैं। भिन्न बाकी एपीआई, जिसमें अलग-अलग डेटा के लिए कई एंडपॉइंट हैं, ग्राफकलाइन एपीआई में केवल एक प्रवेश बिंदु है।

ग्राहक इस एकल प्रविष्टि बिंदु से अपने प्रश्नों में आवश्यक डेटा निर्दिष्ट कर सकते हैं, जिससे यह केवल आवश्यक डेटा प्राप्त करने के लिए अधिक लचीला और कुशल हो जाता है।

सीधे शब्दों में कहें, एक ग्राफक्यूएल एपीआई द्वारा वर्णित ग्राफक्यूएल आर्किटेक्चर को लागू करता है ग्राफक्यूएल विनिर्देशों. इस डिज़ाइन में स्कीमा, क्वेरीज़ और म्यूटेशन को परिभाषित करना शामिल है, जिसके साथ क्लाइंट इंटरैक्ट कर सकते हैं।

यहाँ ग्राफ़कॉल एपीआई आर्किटेक्चर के आवश्यक घटकों का एक सरलीकृत ब्रेकडाउन है:

  1. स्कीमा: एक स्कीमा एपीआई द्वारा प्रदान किए जाने वाले डेटा और संचालन के प्रकारों का विवरण है। मूल रूप से, एक स्कीमा उपलब्ध डेटा की संरचना और प्रश्नों और म्यूटेशन के प्रकार को परिभाषित करता है जिसे क्लाइंट डेटा को संशोधित करने के लिए निष्पादित कर सकता है।
  2. प्रश्न: ग्राहक डेटाबेस से डेटा प्राप्त करने के लिए प्रश्नों का उपयोग करते हैं, इसके लिए आवश्यक डेटा की संरचना निर्दिष्ट करते हैं। इसके अलावा, वे एकाधिक समापन बिंदुओं से संबंधित डेटा प्राप्त करने के लिए एक ही HTTP अनुरोध में कई प्रश्नों को नेस्ट कर सकते हैं।
  3. म्यूटेशन: म्यूटेशन वे ऑपरेशन हैं जिनका उपयोग डेटाबेस पर डेटा को संशोधित करने के लिए किया जाता है। ग्राहक डेटा बनाने, अपडेट करने या हटाने के लिए म्यूटेशन अनुरोध भेज सकते हैं।

एक मोंगोडीबी डाटाबेस सेट अप करें

प्रारंभ करना, एक MongoDB डेटाबेस बनाएँ. वैकल्पिक रूप से, आप कर सकते हैं मुफ्त में क्लाउड में MongoDB क्लस्टर सेट अप करेंएक बार जब आपका डेटाबेस सेट हो जाए, तो MongoDB के डेटाबेस कनेक्शन URI स्ट्रिंग को कॉपी करें।

आप इस प्रोजेक्ट का कोड इसमें पा सकते हैं गिटहब रिपॉजिटरी.

एक अपोलो सर्वर बनाएँ

अपोलो सर्वर एक लोकप्रिय ग्राफक्यूएल सर्वर कार्यान्वयन है जो आपको नोड.जेएस, एक्सप्रेस और अन्य सहित जावास्क्रिप्ट वातावरण में ग्राफक्यूएल एपीआई बनाने की अनुमति देगा।

एक नई परियोजना के लिए एक निर्देशिका बनाएँ और सीडी यह में:

एमकेडीआईआर ग्राफकल-एपीआई-मोंगोडीबी
सीडी ग्राफक्यूएल-एपीआई-मोंगोडीबी

अगला, एक नया Node.js प्रोजेक्ट इनिशियलाइज़ करें।

एनपीएम इनिट --हाँ

यह आदेश एक बनाता है पैकेज.जेसन फ़ाइल।

आवश्यक निर्भरताएँ स्थापित करें

संकुल को स्थापित करने के लिए निम्न कमांड चलाएँ।

एनपीएम अपोलो-सर्वर ग्राफकल नेवला स्थापित करें

अंत में, एक बनाएँ index.js अपने प्रोजेक्ट की रूट डायरेक्टरी में फाइल करें।

अपोलो सर्वर सेट करें

खुला index.js और नीचे कोड जोड़ें:

कॉन्स्ट {अपोलोसर्वर} = ज़रूरत होना('अपोलो-सर्वर');
कॉन्स्ट नेवला = ज़रूरत होना(नेवला);
कॉन्स्ट टाइप डीफ्स = ज़रूरत होना("./graphql/typeDefs");
कॉन्स्ट समाधानकर्ता = ज़रूरत होना("./graphql/रिज़ॉल्वर");

कॉन्स्ट सर्वर = नया अपोलो सर्वर ({
टाइप डीफ्स,
समाधानकर्ता
});

कॉन्स्ट मोंगो_यूआरआई = 'मोंगोडब: // लोकलहोस्ट: 27017';

नेवला
.कनेक्ट (मोंगो_यूआरआई, {
NewUrlParser का उपयोग करें: सत्य,
यूनिफाइड टोपोलॉजी का उपयोग करें: सत्य,
})
।तब(() => {
सांत्वना देना।लकड़ी का लट्ठा('डीबी कनेक्टेड');
वापस करना सर्वर.सुनो ({ पत्तन: 5000 });
})
।तब((आर ई) => {
सांत्वना देना।लकड़ी का लट्ठा('सर्वर चल रहा है ${res.url}`);
})
।पकड़ना(ग़लती होना => {
सांत्वना देना.लॉग (err.message);
});

यह कोड अपोलो सर्वर लाइब्रेरी का उपयोग करके एक स्थानीय ग्राफक्यूएल सर्वर को इनिशियलाइज़ करता है। इसके बाद यह दिए गए कनेक्शन यूआरआई के साथ मोंगोडीबी डेटाबेस से कनेक्शन स्थापित करता है।

ध्यान दें कि कैसे कोड ApolloServer के नए उदाहरण के लिए दो तर्कों को पास करता है: टाइपडिफ्स और रिज़ॉल्वर। ये उन डेटा प्रकारों और परिचालनों को निर्दिष्ट करते हैं जिन्हें ग्राफ़कॉल एपीआई निष्पादित कर सकता है।

MongoDB डेटाबेस से कनेक्शन स्थापित होने के बाद, सर्वर पोर्ट 5000 पर सुनना शुरू कर देता है।

डेटा मॉडल को परिभाषित करें

अपने प्रोजेक्ट फोल्डर की रूट डायरेक्टरी में एक नया फोल्डर बनाएं और उसे नाम दें मॉडल. इस फ़ोल्डर में एक नया फ़ाइल नाम बनाएँ डेटामॉडल.जेएस और इसमें निम्न कोड जोड़ें:

कॉन्स्ट {मॉडल, स्कीमा} = ज़रूरत होना(नेवला);

कॉन्स्ट कर्मचारी स्कीमा = नया स्कीमा({
नाम: डोरी,
विभाग: डोरी,
वेतन: डोरी,
});

मापांकनिर्यात = मॉडल ('कर्मचारी', कर्मचारी स्कीमा);

ग्राफक्यूएल स्कीमा को परिभाषित करें

एक ग्राफक्यूएल स्कीमा उस डेटा की संरचना को परिभाषित करता है जिसे आप ग्राफक्यूएल एपीआई का उपयोग करके क्वेरी कर सकते हैं। स्कीमा उन प्रश्नों और उत्परिवर्तनों को भी रेखांकित करती है जिन्हें एपीआई चला सकता है। आप इसे संशोधित करने के लिए डेटा और म्यूटेशन लाने के लिए प्रश्नों का उपयोग कर सकते हैं।

अपने प्रोजेक्ट की रूट डायरेक्टरी में, एक नया फोल्डर बनाएं और उसे नाम दें ग्राफ़ql. इस फ़ोल्डर के अंदर, दो फ़ाइलें जोड़ें: typeDefs.js और रिज़ॉल्वर.जेएस

नीचे दिए गए कोड को typeDefs.js फ़ाइल में जोड़ें:

कॉन्स्ट {जीक्यूएल} = ज़रूरत होना("अपोलो-सर्वर");

कॉन्स्ट टाइपडिफ्स = gql`
कर्मचारी टाइप करें {
मैंने किया!
नाम: डोरी
विभाग: डोरी
वेतन: डोरी
}
इनपुट कर्मचारी इनपुट {
नाम: डोरी
विभाग: डोरी
वेतन: डोरी
}
क्वेरी टाइप करें {
getEmployee (आईडी: आईडी): कर्मचारी #वापस करना आईडी द्वारा कर्मचारी
कर्मचारी: [कर्मचारी] #वापस करना सरणी का कर्मचारी
}
प्रकार उत्परिवर्तन {
createEmployee (कर्मचारी इनपुट: कर्मचारी इनपुट): कर्मचारी
अद्यतन कर्मचारी (आईडी: आईडी, कर्मचारी इनपुट: कर्मचारी इनपुट): बूलियन
कर्मचारी हटाएं (आईडी: आईडी): बूलियन
}
`;

मापांक.निर्यात = typeDefs;

उपरोक्त यह कोड उपयोग करता है gql कर्मचारी डेटा के लिए एक ग्राफक्यूएल स्कीमा बनाने के लिए अपोलो-सर्वर पैकेज द्वारा प्रदान किया गया कार्य।

स्कीमा में चार मुख्य तत्व होते हैं: कर्मचारी जानकारी के लिए डेटा प्रकार, इनपुट प्रकार, प्रश्न और उत्परिवर्तन जो कि एपीआई कर सकता है।

ग्राफ़क्यूएल एपीआई के लिए रिज़ॉल्वर को परिभाषित करें

एक रिज़ॉल्वर एक ग्राफ़क्यूएल फ़ंक्शन है जो डेटा को परिभाषित करता है जब क्लाइंट डेटा लाने के लिए एपीआई क्वेरी भेजता है। अनिवार्य रूप से, इसकी प्राथमिक भूमिका निर्दिष्ट डेटा स्रोत से आवश्यक डेटा को पुनः प्राप्त करना और क्लाइंट को वापस करना है।

नीचे दिए गए कोड को जोड़ें रिज़ॉल्वर.जेएस फ़ाइल में ग्राफ़ql फ़ोल्डर। रिसॉल्वर, इस मामले में, क्वेरी और म्यूटेशन ऑब्जेक्ट के भीतर निर्दिष्ट किए गए हैं।

क्वेरी ऑब्जेक्ट दो विधियों को परिभाषित करता है: कर्मचारी और getकर्मचारी. क्लाइंट द्वारा अनुरोध पर डेटाबेस से कर्मचारी डेटा लाने के लिए ये विधियां जिम्मेदार हैं।

कॉन्स्ट कर्मचारी = ज़रूरत होना("../मॉडल/कर्मचारीमॉडल");

// ग्राफक्यूएल रिजॉल्वर
कॉन्स्ट समाधानकर्ता = {
जिज्ञासा: {
कर्मचारी: async () => {
कोशिश {
कॉन्स्ट कर्मचारी = इंतजार कर्मचारी खोजें ({});
वापस करना कर्मचारी;
} पकड़ना (गलती) {
सांत्वना देनात्रुटि (त्रुटि);
फेंकनानयागलती('कर्मचारियों को लाने में विफल');
}
},
कर्मचारी प्राप्त करें: async (माता-पिता, आर्ग) => {
कोशिश {
कॉन्स्ट कर्मचारी = इंतजार Employee.findById (args.id);
वापस करना कर्मचारी;
} पकड़ना (गलती) {
सांत्वना देनात्रुटि (त्रुटि);
फेंकनानयागलती('आईडी द्वारा कर्मचारी लाने में विफल');
}
},
},

म्यूटेशन ऑब्जेक्ट की तीन विधियाँ हैं: createकर्मचारी, updateकर्मचारी, और हटाएं कर्मचारी. ये विधियाँ MongoDB डेटाबेस में संग्रहीत डेटा में परिवर्तन करती हैं।

 उत्परिवर्तन: {
async सृजित कर्मचारी (_, { कर्मचारी इनपुट: {नाम, विभाग, वेतन}}) {
कॉन्स्ट नया कर्मचारी = नया कर्मचारी({
नाम नाम,
विभाग: विभाग,
वेतन: वेतन
});

कॉन्स्ट प्रतिक्रिया = इंतजार newEmployee.save ();
सांत्वना देनालॉग (नया कर्मचारी);

वापस करना {
आईडी: प्रतिक्रिया._आईडी,
...प्रतिक्रिया._doc
}
},

async अद्यतन कर्मचारी (_, {आईडी, कर्मचारी इनपुट: {नाम, विभाग, वेतन}}) {
कॉन्स्ट अद्यतन कर्मचारी = इंतजार कर्मचारी.अद्यतन एक (
{ _पहचान: पहचान },
{नाम, विभाग, वेतन}
);

अगर (!अद्यतित कर्मचारी) {
फेंकनानयागलती(`आईडी के साथ कर्मचारी: ${आईडी} नहीं मिला');
}

वापस करनासत्य; // एक बूलियन मान लौटाएं जो अद्यतन सफलता का संकेत देता है
},

async कर्मचारी हटाएं (_, {आईडी}) {
कॉन्स्ट हटाए गए कर्मचारी = इंतजार कर्मचारी.डिलीटवन({ _पहचान: पहचान });

अगर (!हटाया गया कर्मचारी || हटा दिया गयाकर्मचारी.हटाया गयागणना 0) {
फेंकनानयागलती(`आईडी के साथ कर्मचारी ${आईडी} नहीं मिला');
}

वापस करनासत्य; // विलोपन सफलता का संकेत देने वाला एक बूलियन मान लौटाएं
},
 },
};

मापांक.निर्यात = समाधानकर्ता;

अंत में, सर्वर को स्पिन करने के लिए यह कमांड चलाएँ:

नोड index.js

एक बार जब यह एक डेटाबेस कनेक्शन स्थापित कर लेता है, तो सर्वर 5000 पोर्ट पर शुरू हो जाएगा।

आप अपने ब्राउज़र में ग्राफ़िकल खेल के मैदान से HTTP अनुरोध करके आगे बढ़ सकते हैं और ग्राफ़कॉल एपीआई की कार्यक्षमता का परीक्षण कर सकते हैं।

उदाहरण के लिए, आप का उपयोग कर सकते हैं createकर्मचारी MongoDB डेटाबेस में नया कर्मचारी डेटा जोड़ने के लिए उत्परिवर्तन।

डेवलपर समुदाय में ग्राफक्यूएल की लोकप्रियता

लोकप्रिय REST आर्किटेक्चर के लिए वैकल्पिक API डिज़ाइन दृष्टिकोण के रूप में ग्राफ़कॉल डेवलपर समुदाय में कर्षण प्राप्त कर रहा है।

यह एक एकल प्रविष्टि बिंदु से विभिन्न स्रोतों से डेटा पुनर्प्राप्त करने के लिए अधिक लचीला और कुशल तरीका प्रदान करने की क्षमता के कारण है। यह अलग-अलग डेटा के लिए कई समापन बिंदुओं को प्रबंधित करने से बचता है, जो कि REST API आर्किटेक्चर के साथ एक सामान्य समस्या है। यह डिजाइन समाधान बैकएंड एपीआई के निर्माण और प्रबंधन की प्रक्रिया को सुव्यवस्थित करता है।