Go के साथ GraphQL API: चरण-दर-चरण व्यावहारिक ट्यूटोरियल

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: क्यों GraphQL और Go एक आदर्श जोड़ी हैं

\n

आधुनिक वेब डेवलपमेंट में, GraphQL लचीले और कुशल API बनाने के लिए एक मानक बन गया है। अपनी उच्च प्रदर्शन और सरलता के लिए जानी जाने वाली Go (Golang) भाषा के साथ मिलकर, आपको बैकएंड डेवलपमेंट के लिए एक शक्तिशाली उपकरण मिलता है। इस चरण-दर-चरण ट्यूटोरियल में, हम लोकप्रिय लाइब्रेरी gqlgen का उपयोग करके शुरुआत से Go पर एक पूर्ण GraphQL API बनाएंगे।

\n

आप सीखेंगे कि प्रोजेक्ट कैसे सेट अप करें, स्कीमा कैसे परिभाषित करें, रिज़ॉल्वर कैसे लागू करें और प्रमाणीकरण के लिए मिडलवेयर कैसे जोड़ें। लेख के अंत तक, आपके पास एक कार्यशील API होगा जो किसी भी फ्रंटएंड के साथ एकीकरण के लिए तैयार है।

\n\n

1. प्रोजेक्ट सेटअप और निर्भरताएँ स्थापित करना

\n

सबसे पहले, एक नया Go मॉड्यूल बनाएँ और आवश्यक पैकेज स्थापित करें। सुनिश्चित करें कि आपके पास Go संस्करण 1.18 या उच्चतर स्थापित है।

\n
mkdir graphql-go-tutorial\ncd graphql-go-tutorial\ngo mod init graphql-go-tutorial\ngo get github.com/99designs/gqlgen@latest\ngo get github.com/99designs/gqlgen/graphql/introspection@latest
\n

अब प्रोजेक्ट में gqlgen को इनिशियलाइज़ करें। यह कमांड एक बुनियादी फ़ाइल संरचना बनाएगा:

\n
go run github.com/99designs/gqlgen init
\n

निष्पादन के बाद, आप निम्नलिखित संरचना देखेंगे:

\n
    \n
  • graph/ — स्कीमा और रिज़ॉल्वर फ़ाइलों वाली निर्देशिका
  • \n
  • graph/schema.graphqls — GraphQL स्कीमा परिभाषा
  • \n
  • graph/resolver.go — रिज़ॉल्वर के लिए स्टब्स
  • \n
  • server.go — एप्लिकेशन का प्रवेश बिंदु
  • \n
  • gqlgen.yml — जनरेटर कॉन्फ़िगरेशन
  • \n
\n\n

2. GraphQL स्कीमा परिभाषित करना

\n

फ़ाइल graph/schema.graphqls खोलें और अपना डेटा मॉडल परिभाषित करें। उदाहरण के लिए, एक सरल कार्य प्रबंधन प्रणाली (Task Manager) बनाएँ:

\n
type Task {\n  id: ID!\n  title: String!\n  description: String\n  status: TaskStatus!\n  createdAt: Time!\n}\n\nenum TaskStatus {\n  TODO\n  IN_PROGRESS\n  DONE\n}\n\ntype Query {\n  tasks(status: TaskStatus): [Task!]!\n  task(id: ID!): Task\n}\n\ntype Mutation {\n  createTask(title: String!, description: String): Task!\n  updateTask(id: ID!, title: String, description: String, status: TaskStatus): Task!\n  deleteTask(id: ID!): Boolean!\n}\n\nscalar Time
\n

स्कीमा सहेजने के बाद, कोड जनरेशन चलाएँ:

\n
go run github.com/99designs/gqlgen generate
\n

यह कमांड Go संरचनाओं के साथ फ़ाइल graph/model/models_gen.go बनाएगा और रिज़ॉल्वर को अपडेट करेगा।

\n\n

3. रिज़ॉल्वर और व्यावसायिक तर्क को लागू करना

\n

अब फ़ाइल graph/schema.resolvers.go में तर्क लागू करें। पहले, एक सरल इन-मेमोरी स्टोर बनाएँ:

\n
// graph/resolver.go में स्टोर जोड़ें\ntype Resolver struct {\n  tasks []*model.Task\n  mu    sync.Mutex\n}\n\nfunc NewResolver() *Resolver {\n  return &Resolver{\n    tasks: make([]*model.Task, 0),\n  }\n}
\n

अब Query और Mutation के लिए रिज़ॉल्वर लागू करें:

\n
// Query.Task\nfunc (r *queryResolver) Task(ctx context.Context, id string) (*model.Task, error) {\n  r.mu.Lock()\n  defer r.mu.Unlock()\n  \n  for _, task := range r.tasks {\n    if task.ID == id {\n      return task, nil\n    }\n  }\n  return nil, fmt.Errorf("task not found")\n}\n\n// Mutation.CreateTask\nfunc (r *mutationResolver) CreateTask(ctx context.Context, title string, description *string) (*model.Task, error) {\n  r.mu.Lock()\n  defer r.mu.Unlock()\n  \n  task := &model.Task{\n    ID:          uuid.New().String(),\n    Title:       title,\n    Description: description,\n    Status:      model.TaskStatusTodo,\n    CreatedAt:   time.Now(),\n  }\n  \n  r.tasks = append(r.tasks, task)\n  return task, nil\n}\n\n// Mutation.UpdateTask\nfunc (r *mutationResolver) UpdateTask(ctx context.Context, id string, title *string, description *string, status *model.TaskStatus) (*model.Task, error) {\n  r.mu.Lock()\n  defer r.mu.Unlock()\n  \n  for _, task                

ब्लॉग

पुस्तक अनुशंसाएँ