GraphQL लाइब्रेरी JavaScript (Node.js): पूर्ण गाइड
GraphQL एक क्वेरी भाषा और API के लिए रनटाइम वातावरण है, जिसे Facebook द्वारा विकसित किया गया है। Node.js इकोसिस्टम में, GraphQL के साथ काम करने के लिए मुख्य लाइब्रेरी graphql पैकेज है। यह GraphQL क्वेरी बनाने, मान्य करने और निष्पादित करने के लिए सभी आवश्यक उपकरण प्रदान करता है। यह लाइब्रेरी Apollo Server, Express-GraphQL और अन्य जैसे लोकप्रिय फ्रेमवर्क का आधार है।
GraphQL क्या है और इसकी आवश्यकता क्यों है?
REST API के विपरीत, जहां प्रत्येक एंडपॉइंट एक निश्चित डेटा संरचना लौटाता है, GraphQL क्लाइंट को केवल उन्हीं फ़ील्ड का अनुरोध करने की अनुमति देता है जिनकी उसे आवश्यकता होती है। यह over-fetching (अनावश्यक डेटा प्राप्त करना) और under-fetching (डेटा की कमी) की समस्या को हल करता है। मुख्य लाभ:
- क्वेरी में लचीलापन: क्लाइंट स्वयं निर्धारित करता है कि कौन सा डेटा प्राप्त करना है।
- एकल प्रवेश बिंदु: सभी क्वेरी एक ही एंडपॉइंट पर जाती हैं (उदाहरण के लिए,
/graphql)। - सख्त टाइपिंग: GraphQL स्कीमा डेटा प्रकारों और उनके संबंधों को परिभाषित करती है।
- इंट्रोस्पेक्शन: स्वचालित रूप से दस्तावेज़ीकरण और परीक्षण उपकरण (GraphiQL) उत्पन्न किए जा सकते हैं।
Node.js के लिए GraphQL लाइब्रेरी स्थापित करना
आरंभ करने के लिए, npm या yarn के माध्यम से पैकेज स्थापित करें:
npm install graphqlआपको एक HTTP सर्वर, जैसे express, और मिडलवेयर express-graphql (या Apollo Server) की भी आवश्यकता होगी। लेकिन graphql लाइब्रेरी स्वयं मुख्य भाग है।
पहली स्कीमा और रिज़ॉल्वर बनाना
स्कीमा डेटा प्रकारों और उपलब्ध संचालन (क्वेरी, म्यूटेशन) का विवरण है। रिज़ॉल्वर वे फ़ंक्शन हैं जो डेटा प्राप्त करने की वास्तविक लॉजिक को निष्पादित करते हैं।
एक सरल स्कीमा का उदाहरण जिसमें एक User प्रकार और user क्वेरी है:
const { graphql, buildSchema } = require('graphql');
// स्कीमा परिभाषित करेंconst schema = buildSchema(` type User { id: ID! name: String email: String }
type Query { user(id: ID!): User }`);
// डेटा (वास्तविक प्रोजेक्ट में — डेटाबेस)const users = [ { id: '1', name: 'इवान', email: 'ivan@example.com' }, { id: '2', name: 'मारिया', email: 'maria@example.com' }];
// रिज़ॉल्वरconst root = { user: ({ id }) => users.find(user => user.id === id)};
// क्वेरी निष्पादित करेंgraphql({ schema, source: '{ user(id: "1") { name email } }', rootValue: root}).then(response => { console.log(JSON.stringify(response)); // {"data":{"user":{"name":"इवान","email":"ivan@example.com"}}}});GraphQL में डेटा प्रकार
graphql लाइब्रेरी सभी मानक स्केलर प्रकारों का समर्थन करती है:
String— स्ट्रिंग;Int— पूर्णांक;Float— फ़्लोटिंग पॉइंट संख्या;Boolean— बूलियन मान;ID— अद्वितीय पहचानकर्ता (स्ट्रिंग के रूप में सीरियलाइज़ किया गया)।
आप कस्टम ऑब्जेक्ट प्रकार, एनुम (enum), सूचियाँ ([Type]) और नॉन-नल फ़ील्ड (Type!) भी बना सकते हैं।
म्यूटेशन और सब्सक्रिप्शन
म्यूटेशन का उपयोग डेटा को बदलने के लिए किया जाता है (REST में POST/PUT/DELETE के समान)। सब्सक्रिप्शन WebSocket के माध्यम से रीयल-टाइम अपडेट प्राप्त करने की अनुमति देते हैं।
उपयोगकर्ता जोड़ने के लिए म्यूटेशन का उदाहरण:
const schema = buildSchema(` type Mutation { addUser(name: String!, email: String!): User }`);
const root = { addUser: ({ name, email }) => { const newUser = { id: String(users.length + 1), name, email }; users.push(newUser); return newUser; }};
// म्यूटेशन निष्पादित करनाgraphql({ schema, source: 'mutation { addUser(name: "पीटर", email: "petr@example.com") { id name } }', rootValue: root}).then(console.