GraphQL और Go का परिचय
\nGraphQL API के लिए एक क्वेरी भाषा है जो क्लाइंट को केवल वही डेटा प्राप्त करने की अनुमति देती है जिसकी उन्हें आवश्यकता होती है, और कुछ भी अतिरिक्त नहीं। REST के विपरीत, जहां प्रत्येक एंडपॉइंट एक निश्चित डेटा संरचना लौटाता है, GraphQL लचीलापन और नियंत्रण प्रदान करता है। Go (Golang) के साथ संयोजन में - एक तेज़, टाइप-सुरक्षित और सरल भाषा - आपको आधुनिक वेब सेवाएँ बनाने के लिए एक शक्तिशाली उपकरण मिलता है।
\nइस ट्यूटोरियल में, हम शुरू से Go में एक सरल GraphQL API बनाएंगे। आप निर्भरताएँ स्थापित करना, स्कीमा का वर्णन करना, रिज़ॉल्वर लागू करना और सर्वर चलाना सीखेंगे। यह लेख शुरुआती लोगों के लिए है, इसलिए सभी चरणों को विस्तार से समझाया गया है।
\n\n1. प्रोजेक्ट तैयार करना और निर्भरताएँ स्थापित करना
\nकोड लिखने से पहले, सुनिश्चित करें कि आपके पास Go संस्करण 1.18 या उच्चतर स्थापित है। प्रोजेक्ट के लिए एक नई निर्देशिका बनाएँ और मॉड्यूल को इनिशियलाइज़ करें:
\nmkdir graphql-go-tutorial\ncd graphql-go-tutorial\ngo mod init graphql-go-tutorial\n\nलाइब्रेरी का चयन: gqlgen
\nGo में GraphQL के साथ काम करने के लिए कई लाइब्रेरी हैं। हम gqlgen का उपयोग करेंगे - एक लोकप्रिय कोड जनरेटर जो स्कीमा के आधार पर प्रकार और रिज़ॉल्वर बनाता है। इसे स्थापित करें:
go get github.com/99designs/gqlgen@latest\n\ngqlgen को इनिशियलाइज़ करना
\nडिफ़ॉल्ट फ़ाइलें बनाने के लिए कमांड चलाएँ:
\ngo run github.com/99designs/gqlgen init\nयह कमांड कई फ़ाइलें बनाएगा:
\n- \n
graph/schema.graphqls— GraphQL स्कीमा फ़ाइल; \n graph/resolver.go— रिज़ॉल्वर का खाका; \n server.go— सर्वर का प्रवेश बिंदु; \n gqlgen.yml— जनरेशन कॉन्फ़िगरेशन। \n
2. GraphQL स्कीमा का वर्णन
\nफ़ाइल graph/schema.graphqls खोलें। डिफ़ॉल्ट रूप से, इसमें पहले से ही Todo प्रकार का एक उदाहरण है। हम इसे User प्रकार और कुछ क्वेरी जोड़कर विस्तारित करेंगे।
फ़ाइल की सामग्री को निम्नलिखित से बदलें:
\ntype User {\n id: ID!\n name: String!\n email: String!\n}\n\ntype Todo {\n id: ID!\n text: String!\n done: Boolean!\n user: User!\n}\n\ntype Query {\n todos: [Todo!]!\n users: [User!]!\n user(id: ID!): User\n}\n\ntype Mutation {\n createTodo(text: String!, userId: ID!): Todo!\n markDone(id: ID!): Todo!\n}\nयहाँ हमने परिभाषित किया है:
\n- \n
- User — id, name, email फ़ील्ड वाला उपयोगकर्ता। \n
- Todo — id, text, done फ़ील्ड और उपयोगकर्ता के लिंक वाला कार्य। \n
- Query — डेटा पढ़ने के लिए प्रवेश बिंदु। \n
- Mutation — डेटा बदलने के लिए संचालन। \n
3. कोड जनरेशन और रिज़ॉल्वर का कार्यान्वयन
\nस्कीमा का वर्णन करने के बाद, Go कोड जनरेट करना आवश्यक है। चलाएँ:
\ngo run github.com/99designs/gqlgen generate\nयह models_gen.go फ़ाइलें बनाएगा और resolver.go को अपडेट करेगा। अब graph/resolver.go खोलें।
डेटा स्टोरेज जोड़ना
\nसरलता के लिए, हम डेटा को मेमोरी में स्टोर करेंगे। resolver.go में एक संरचना जोड़ें:
type Resolver struct {\n Users []*model.User\n Todos []*model.Todo\n}\nmodel पैकेज को इम्पोर्ट करना न भूलें।
क्वेरी (Query) का कार्यान्वयन
\nQuery के लिए जनरेटेड मेथड खोजें। उन्हें लागू करें:
\nfunc (r *queryResolver) Todos(ctx context.Context) ([]*model.Todo, error) {\n return r.Resolver.Todos, nil\n}\n\nfunc (r *queryResolver) Users(ctx context.Context) ([]*model.User, error) {\n return r.Resolver.Users, nil\n}\n\nfunc (r *queryResolver) User(ctx context.Context, id string) (*model.User, error) {\n for _, u := range r.Resolver.Users {\n if u.ID == id {\n return u, nil\n }\n }\n return nil, fmt.Errorf("user not found")\n}
ब्लॉग
पुस्तक अनुशंसाएँ
यह भी पढ़ें
शुरुआती JavaScript डेवलपर्स की शीर्ष गलतियाँ: उनसे कैसे बचें
Go 2025: जूनियर और सीनियर के लिए टॉप किताबें, क्या पढ़ें?
PHP में JSON के साथ काम करना: डेटा का पार्सिंग और सीरियलाइज़ेशन
जावा अनुप्रयोगों की निगरानी: मेट्रिक्स और अलर्ट A से Z तक
Rust में कतारें और बैकग्राउंड टास्क: एक घंटे में Async Worker बनाएं