30 मिनट में Go पर REST API कैसे लिखें: व्यावहारिक मार्गदर्शिका

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

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

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

परिचय: REST API के लिए Go क्यों?

\n

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

\n

इस मार्गदर्शिका में हम कार्यों की सूची (Todo app) के प्रबंधन के लिए एक API लिखेंगे। आप सीखेंगे कि रूटिंग कैसे सेट करें, JSON को कैसे संभालें, लॉगिंग के लिए मिडलवेयर कैसे जोड़ें और त्रुटियों को सही तरीके से कैसे लौटाएं। बिना किसी तृतीय-पक्ष फ्रेमवर्क के — केवल शुद्ध Go!

\n\n

1. प्रोजेक्ट सेटअप और संरचना

\n

प्रोजेक्ट के लिए एक नई निर्देशिका बनाएं और Go मॉड्यूल को इनिशियलाइज़ करें:

\n
mkdir go-todo-api\ncd go-todo-api\ngo mod init todo-api
\n

प्रोजेक्ट संरचना सरल होगी:

\n
    \n
  • main.go — एंट्री पॉइंट और सर्वर स्टार्ट
  • \n
  • handlers.go — अनुरोध हैंडलर
  • \n
  • models.go — डेटा संरचनाएं
  • \n
  • middleware.go — मिडलवेयर
  • \n
\n

कार्य संरचना के साथ models.go फ़ाइल बनाएं:

\n
package main\n\ntype Task struct {\n    ID        int    `json:"id"`\n    Title     string `json:"title"`\n    Completed bool   `json:"completed"`\n}
\n

हम सरलता के लिए कार्यों को मेमोरी (tasks स्लाइस) में संग्रहीत करेंगे। वास्तविक प्रोजेक्ट में डेटाबेस का उपयोग करें।

\n\n

2. रूटिंग और हैंडलर

\n

Go अंतर्निहित पैकेज net/http का उपयोग करता है। आइए मुख्य हैंडलर के साथ handlers.go फ़ाइल बनाएं।

\n

2.1. GET /tasks — सभी कार्य प्राप्त करें

\n
package main\n\nimport (\n    "encoding/json"\n    "net/http"\n    "strconv"\n)\n\nvar tasks = []Task{}\nvar nextID = 1\n\nfunc getTasks(w http.ResponseWriter, r *http.Request) {\n    w.Header().Set("Content-Type", "application/json")\n    json.NewEncoder(w).Encode(tasks)\n}
\n

2.2. POST /tasks — नया कार्य बनाएं

\n
func createTask(w http.ResponseWriter, r *http.Request) {\n    var newTask Task\n    if err := json.NewDecoder(r.Body).Decode(&newTask); err != nil {\n        http.Error(w, "Invalid JSON", http.StatusBadRequest)\n        return\n    }\n    newTask.ID = nextID\n    nextID++\n    tasks = append(tasks, newTask)\n    w.Header().Set("Content-Type", "application/json")\n    w.WriteHeader(http.StatusCreated)\n    json.NewEncoder(w).Encode(newTask)\n}
\n

2.3. PUT /tasks/{id} — कार्य अपडेट करें

\n
func updateTask(w http.ResponseWriter, r *http.Request) {\n    idStr := r.PathValue("id")\n    id, err := strconv.Atoi(idStr)\n    if err != nil {\n        http.Error(w, "Invalid task ID", http.StatusBadRequest)\n        return\n    }\n    \n    var updatedTask Task\n    if err := json.NewDecoder(r.Body).Decode(&updatedTask); err != nil {\n        http.Error(w, "Invalid JSON", http.StatusBadRequest)\n        return\n    }\n    \n    for i, t := range tasks {\n        if t.ID == id {\n            tasks[i].Title = updatedTask.Title\n            tasks[i].Completed = updatedTask.Completed\n            w.Header().Set("Content-Type", "application/json")\n            json.NewEncoder(w).Encode(tasks[i])\n            return\n        }\n    }\n    http.Error(w, "Task not found", http.StatusNotFound)\n}
\n

2.4. DELETE /tasks/{id} — कार्य हटाएं

\n
func deleteTask(w http.ResponseWriter, r *http.Request) {\n    idStr := r.PathValue("id")\n    id, err := strconv.Atoi(idStr)\n    if err != nil {\n        http.Error(w, "Invalid task ID", http.StatusBadRequest)\n        return\n    }\n    \n    for i, t := range tasks {\n        if t.ID == id {\n            tasks = append(tasks[:i], tasks[i+1:]...)\n            w.WriteHeader(http.StatusNoContent)\n            return\n        }\n    }\n    http.Error(w, "Task not found", http.StatusNotFound)\n}
\n

ध्यान दें

ब्लॉग

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