JavaScript के साथ GraphQL API: चरण-दर-चरण ट्यूटोरियल
GraphQL API के लिए एक क्वेरी भाषा है जो क्लाइंट को केवल वही डेटा अनुरोध करने की अनुमति देती है जिसकी उन्हें वास्तव में आवश्यकता होती है। REST के विपरीत, जहां प्रतिक्रिया संरचना निश्चित होती है, GraphQL लचीलापन और नियंत्रण प्रदान करता है। इस ट्यूटोरियल में, हम लोकप्रिय Apollo Server लाइब्रेरी का उपयोग करके Node.js पर एक सरल GraphQL API बनाएंगे।
आप सर्वर को कॉन्फ़िगर करना, डेटा प्रकारों को परिभाषित करना, रिज़ॉल्वर लिखना और क्वेरी और म्यूटेशन निष्पादित करना सीखेंगे। सभी कोड उदाहरण स्थानीय रूप से चलाए जा सकते हैं।
1. वातावरण सेटअप और निर्भरताएँ स्थापित करना
कोड लिखने से पहले, सुनिश्चित करें कि आपके पास Node.js (संस्करण 14 या उच्चतर) स्थापित है। प्रोजेक्ट के लिए एक नया फ़ोल्डर बनाएं और npm को इनिशियलाइज़ करें:
mkdir graphql-tutorialcd graphql-tutorialnpm init -yअब आवश्यक पैकेज स्थापित करें। मुख्य निर्भरताएँ: express (वेब फ्रेमवर्क), @apollo/server (GraphQL सर्वर), graphql (GraphQL कोर) और cors (क्रॉस-डोमेन अनुरोधों के लिए)।
npm install express @apollo/server graphql corsएक फ़ाइल index.js बनाएं - इसमें सर्वर का सारा कोड होगा।
2. GraphQL स्कीमा और रिज़ॉल्वर बनाना
स्कीमा डेटा प्रकारों और संचालन (क्वेरी, म्यूटेशन) का विवरण है। रिज़ॉल्वर ऐसे फ़ंक्शन हैं जो प्रत्येक फ़ील्ड के लिए डेटा लौटाते हैं।
हम एक सरल डेटा मॉडल जोड़ेंगे - पुस्तकों की एक सूची। प्रत्येक पुस्तक में id, title, author और year होता है।
index.js खोलें और निम्नलिखित कोड लिखें:
const { ApolloServer } = require('@apollo/server');const { startStandaloneServer } = require('@apollo/server/standalone');const express = require('express');const cors = require('cors');
// डेटाबेस का अनुकरणlet books = [ { id: '1', title: 'वॉर एंड पीस', author: 'लियो टॉल्स्टॉय', year: 1869 }, { id: '2', title: 'क्राइम एंड पनिशमेंट', author: 'फ्योडोर दोस्तोयेव्स्की', year: 1866 }, { id: '3', title: 'द मास्टर एंड मार्गरीटा', author: 'मिखाइल बुल्गाकोव', year: 1967 }];
// स्कीमा परिभाषा (टाइप डेफिनिशन)const typeDefs = `#graphql type Book { id: ID! title: String! author: String! year: Int }
type Query { books: [Book] book(id: ID!): Book }
type Mutation { addBook(title: String!, author: String!, year: Int): Book deleteBook(id: ID!): Book }`;
// रिज़ॉल्वरconst resolvers = { Query: { books: () => books, book: (parent, args) => books.find(book => book.id === args.id) }, Mutation: { addBook: (parent, args) => { const newBook = { id: String(books.length + 1), title: args.title, author: args.author, year: args.year }; books.push(newBook); return newBook; }, deleteBook: (parent, args) => { const index = books.findIndex(book => book.id === args.id); if (index === -1) return null; const deletedBook = books.splice(index, 1)[0]; return deletedBook; } }};
// सर्वर प्रारंभ करनाasync function startServer() { const app = express(); app.use(cors());
const server = new ApolloServer({ typeDefs, resolvers, });
const { url } = await startStandaloneServer(server, { listen: { port: 4000 }, });
console.log(`GraphQL सर्वर ${url} पर चालू है`);}
startServer();कोड को समझते हैं:
- typeDefs -
Book,Query(क्वेरी) औरMutation(परिवर्तन) प्रकारों को परिभाषित करता है। - resolvers - प्रत्येक फ़ील्ड के लिए फ़ंक्शन शामिल करता है।
booksके लिए पूरी सरणी लौटाता है,bookके लिए id द्वारा फ़िल्टर करता है। - startStandaloneServer - पोर्ट 4000 पर सर्वर प्रारंभ करता है।