Node.js के लिए GraphQL लाइब्रेरी: Apollo Server और डेवलपमेंट टूल्स
\n\nGraphQL एक API क्वेरी भाषा है जो क्लाइंट को केवल उन डेटा को अनुरोध करने की अनुमति देती है जिनकी उन्हें आवश्यकता है। Node.js पर डेवलपमेंट के लिए सबसे लोकप्रिय लाइब्रेरी Apollo Server है। यह GraphQL API बनाने, परीक्षण करने और तैनात करने के लिए टूलों का एक पूर्ण सेट प्रदान करता है। इस लेख में, हम प्रमुख घटकों, दृष्टिकोणों और कोड उदाहरणों पर विस्तार से चर्चा करेंगे।
\n\nApollo Server क्या है?
\nApollo Server एक ओपन-सोर्स लाइब्रेरी है जो Node.js पर GraphQL सर्वर को जल्दी से बनाने की अनुमति देती है। यह कई ट्रांसपोर्ट (HTTP, WebSocket) का समर्थन करती है और फ्रेमवर्क (Express, Koa, Fastify) के साथ आसानी से एकीकृत होती है। मुख्य विशेषताएं:
\n- \n
- GraphQL Playground के माध्यम से स्वचालित दस्तावेज़ीकरण निर्माण। \n
- WebSocket के माध्यम से सब्सक्रिप्शन का समर्थन। \n
- कैशिंग और डेटा संयोजन तंत्र (data loaders)। \n
- प्रमाणीकरण और प्राधिकरण के लिए लचीली middleware प्रणाली। \n
स्थापना और बुनियादी सेटअप
\nशुरू करने के लिए, apollo-server और graphql पैकेज स्थापित करें:
npm install apollo-server graphql\n\nएक सरल सर्वर बनाएं जो अभिवादन लौटाता है:
\nconst { ApolloServer, gql } = require('apollo-server');\n\n// स्कीमा परिभाषित करें (SDL)\nconst typeDefs = gql`\n type Query {\n hello: String\n }\n`;\n\n// रिज़ॉल्वर — फ़ंक्शन जो डेटा लौटाते हैं\nconst resolvers = {\n Query: {\n hello: () => 'Hello, GraphQL!',\n },\n};\n\n// सर्वर शुरू करें\nconst server = new ApolloServer({ typeDefs, resolvers });\nserver.listen().then(({ url }) => {\n console.log(`🚀 सर्वर ${url} पर शुरू हुआ`);\n});\n\nडेटा प्रकार और स्कीमा
\nGraphQL में, स्कीमा सभी उपलब्ध प्रकारों और संचालनों को परिभाषित करती है। मुख्य प्रकार:
\n- \n
String,Int,Float,Boolean,ID— स्केलर प्रकार। \n [Type]— ऑब्जेक्ट की सूची। \n type— कस्टम ऑब्जेक्ट। \n input— म्यूटेशन के इनपुट पैरामीटर के लिए प्रकार। \n
ब्लॉग के लिए स्कीमा का उदाहरण:
\ntype User {\n id: ID!\n name: String!\n posts: [Post!]!\n}\n\ntype Post {\n id: ID!\n title: String!\n content: String!\n author: User!\n}\n\ntype Query {\n user(id: ID!): User\n posts(limit: Int): [Post!]!\n}\n\ntype Mutation {\n createUser(name: String!): User!\n}\n\nरिज़ॉल्वर: स्कीमा को डेटा से जोड़ना
\nस्कीमा के प्रत्येक फ़ील्ड का एक संबंधित रिज़ॉल्वर होना चाहिए। रिज़ॉल्वर डेटाबेस (MongoDB, PostgreSQL), बाहरी API या स्थिर ऐरे से डेटा प्राप्त कर सकते हैं।
\nconst users = [\n { id: '1', name: 'अन्ना' },\n { id: '2', name: 'बोरिस' },\n];\n\nconst posts = [\n { id: '10', title: 'शुरुआती के लिए GraphQL', content: '...', authorId: '1' },\n { id: '20', title: 'Node.js टिप्स', content: '...', authorId: '2' },\n];\n\nconst resolvers = {\n Query: {\n user: (_, { id }) => users.find(u => u.id === id),\n posts: (_, { limit }) => limit ? posts.slice(0, limit) : posts,\n },\n Mutation: {\n createUser: (_, { name }) => {\n const newUser = { id: String(users.length + 1), name };\n users.push(newUser);\n return newUser;\n },\n },\n User: {\n posts: (parent) => posts.filter(p => p.authorId === parent.id),\n },\n};\n\nTypeGraphQL के साथ Code-first दृष्टिकोण
\nबड़ी परियोजनाओं के लिए, code-first दृष्टिकोण का उपयोग करना अधिक सुविधाजनक है, जहां स्कीमा TypeScript क्लासेस से उत्पन्न होती है। type-graphql लाइब्रेरी आपको ऐसा कोड लिखने की अनुमति देती है जो एक साथ प्रकार और रिज़ॉल्वर दोनों है।
npm install type-graphql reflect-metadata class-validator\n\nएंटिटी क्लास का उदाहरण:
\nimport { ObjectType, Field,