परिचय
GraphQL Facebook द्वारा विकसित API के लिए एक आधुनिक क्वेरी भाषा है। REST के विपरीत, यह क्लाइंट को केवल आवश्यक डेटा का अनुरोध करने की अनुमति देता है, जिससे नेटवर्क पर लोड कम होता है और विकास में तेजी आती है। इस ट्यूटोरियल में, हम लोकप्रिय लाइब्रेरी gqlgen का उपयोग करके Go (Golang) भाषा में एक पूर्ण GraphQL API बनाएंगे। आप सीखेंगे कि सर्वर कैसे सेट करें, स्कीमा कैसे परिभाषित करें, रिज़ॉल्वर कैसे लिखें और क्वेरी कैसे निष्पादित करें। यह लेख उन डेवलपर्स के लिए है जो Go की मूल बातें जानते हैं, लेकिन विस्तृत टिप्पणियों के कारण शुरुआती भी चरणों को दोहरा सकते हैं।
1. प्रोजेक्ट सेटअप और निर्भरताएँ स्थापित करना
सबसे पहले, हम एक नया Go प्रोजेक्ट बनाएंगे और आवश्यक पैकेज स्थापित करेंगे।
चरण 1: मॉड्यूल आरंभ करना
mkdir graphql-go-tutorialcd graphql-go-tutorialgo mod init graphql-go-tutorialचरण 2: gqlgen स्थापित करना
gqlgen Go के लिए एक GraphQL कोड जनरेटर है। यह स्कीमा के आधार पर स्वचालित रूप से रिज़ॉल्वर बनाता है।
go get github.com/99designs/gqlgen@latestचरण 3: प्रोजेक्ट का ढाँचा तैयार करना
आरंभीकरण कमांड चलाएँ:
go run github.com/99designs/gqlgen initनिष्पादन के बाद, आप निम्नलिखित संरचना देखेंगे:
graph/— स्कीमा और रिज़ॉल्वर वाला फ़ोल्डरserver.go— प्रवेश बिंदुgqlgen.yml— जनरेटर कॉन्फ़िगरेशन
2. GraphQL स्कीमा परिभाषित करना
स्कीमा डेटा प्रकारों और API संचालन का वर्णन करती है। फ़ाइल graph/schema.graphqls खोलें और इसकी सामग्री को निम्नलिखित से बदलें:
type User { id: ID! name: String! email: String! age: Int!}
type Query { users: [User!]! user(id: ID!): User}
type Mutation { createUser(name: String!, email: String!, age: Int!): User! updateUser(id: ID!, name: String, email: String, age: Int): User deleteUser(id: ID!): Boolean}यहाँ हमने परिभाषित किया है:
- User — id, name, email, age फ़ील्ड वाला एक ऑब्जेक्ट।
- Query — पढ़ने के संचालन (सभी उपयोगकर्ता प्राप्त करें या ID द्वारा एक)।
- Mutation — लिखने के संचालन (बनाएँ, अपडेट करें, हटाएँ)।
सहेजने के बाद, कोड जनरेशन चलाएँ:
go run github.com/99designs/gqlgen generateयह फ़ाइलें models_gen.go (Go प्रकार) और generated.go (रिज़ॉल्वर इंटरफ़ेस) बनाएगा।
3. रिज़ॉल्वर और डेटा स्टोरेज का कार्यान्वयन
अब हमें क्वेरी प्रोसेस करने के लिए लॉजिक लिखना होगा। सरलता के लिए, हम डेटा को मेमोरी में (स्ट्रक्चर की स्लाइस) स्टोर करेंगे।
चरण 1: स्टोरेज बनाना
फ़ाइल graph/store.go बनाएँ:
package graph
import "sync"
type Store struct { mu sync.RWMutex users []User nextID int}
func NewStore() *Store { return &Store{ users: []User{ {ID: "1", Name: "Alice", Email: "alice@example.com", Age: 30}, {ID: "2", Name: "Bob", Email: "bob@example.com", Age: 25}, }, nextID: 3, }}
func (s *Store) GetUsers() []User { s.mu.RLock() defer s.mu.RUnlock() return s.users}
func (s *Store) GetUser(id string) *User { s.mu.RLock() defer s.mu.RUnlock() for _, u := range s.users { if u.ID == id { return &u } } return nil}
func (s *Store) CreateUser(name, email string, age int) User { s.mu.Lock() defer s.mu.Unlock() user := User{ ID: fmt.Sprintf("%d", s.nextID), Name: name, Email: email, Age: age, } s.nextID++ s.users = append(s.users, user) return user}
func (s *Store) UpdateUser(id string, name, email *string, age *int) *User { s.mu.Lock() defer s.mu.Unlock() for i, u := range s.users { if u.ID == id { if name != nil { s.users[i].Name = *name } if email