परिचय: REST API के लिए Go क्यों आदर्श है?
Go (या Golang) एक आधुनिक कंपाइल्ड प्रोग्रामिंग भाषा है, जिसे Google में बनाया गया है। यह C++ की परफॉरमेंस और Python की सरलता को जोड़ती है, जो इसे उच्च-लोड वाली वेब सेवाओं और REST API बनाने के लिए एक आदर्श विकल्प बनाती है। कई अन्य भाषाओं के विपरीत, Go में HTTP सर्वर, मल्टीथ्रेडिंग और तेज़ कंपाइलेशन के लिए बिल्ट-इन सपोर्ट है।
इस गाइड में, हम चरण दर चरण कार्यों की सूची (Todo List) को प्रबंधित करने के लिए एक पूर्ण REST API बनाएंगे। आप सीखेंगे:
- Go पर HTTP सर्वर सेट अप करना
- JSON अनुरोधों और प्रतिक्रियाओं के साथ काम करना
- CRUD ऑपरेशन (Create, Read, Update, Delete) लागू करना
- curl या Postman के साथ API का परीक्षण करना
पूरी प्रक्रिया में आपको 30 मिनट से अधिक नहीं लगेंगे। चलिए शुरू करते हैं!
1. प्रोजेक्ट की स्थापना और सेटअप
कोड लिखने से पहले, सुनिश्चित करें कि आपके पास Go स्थापित है। इसे इस कमांड से जांचा जा सकता है:
go versionयदि Go स्थापित नहीं है, तो आधिकारिक वेबसाइट से नवीनतम संस्करण डाउनलोड करें।
प्रोजेक्ट के लिए एक नई डायरेक्टरी बनाएं और मॉड्यूल को इनिशियलाइज़ करें:
mkdir go-rest-apicd go-rest-apigo mod init go-rest-apiअब एक फ़ाइल main.go बनाएं — इसमें हमारा सारा कोड होगा। रूटिंग के साथ काम करने की सुविधा के लिए, हम मानक लाइब्रेरी net/http का उपयोग करेंगे, जो पहले से Go में बनी हुई है। किसी तीसरे पक्ष की निर्भरता की आवश्यकता नहीं है — यह भाषा के मुख्य लाभों में से एक है।
2. डेटा संरचना और भंडारण को परिभाषित करना
आइए डेटा मॉडल का वर्णन करके शुरू करें। सरलता के लिए, हम कार्यों को डेटाबेस के बजाय मेमोरी (एक स्लाइस में) में संग्रहीत करेंगे। आइए एक Task संरचना और एक वैश्विक ID काउंटर बनाएं:
package main
import ( "encoding/json" "log" "net/http" "strconv" "strings" "sync")
// Task एक कार्य का प्रतिनिधित्व करता हैtype Task struct { ID int `json:"id"` Title string `json:"title"` Done bool `json:"done"`}
// कार्यों का भंडारण (मेमोरी में)var ( tasks []Task nextID int = 1 mu sync.Mutex)sync.Mutex पर ध्यान दें — यह डेटा तक थ्रेड-सेफ पहुंच के लिए आवश्यक है, क्योंकि Go सर्वर अनुरोधों को समानांतर रूप से संसाधित कर सकता है।
3. CRUD ऑपरेशन लागू करना
अब प्रत्येक HTTP विधि के लिए मुख्य हैंडलर लिखते हैं। हम URL द्वारा रूटिंग पैटर्न का उपयोग करेंगे:
GET /tasks— सभी कार्य प्राप्त करेंPOST /tasks— एक नया कार्य बनाएंGET /tasks/{id}— ID द्वारा कार्य प्राप्त करेंPUT /tasks/{id}— कार्य अपडेट करेंDELETE /tasks/{id}— कार्य हटाएं
3.1. सभी कार्य प्राप्त करना (GET /tasks)
func getTasks(w http.ResponseWriter, r *http.Request) { mu.Lock() defer mu.Unlock()
w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(tasks)}3.2. कार्य बनाना (POST /tasks)
func createTask(w http.ResponseWriter, r *http.Request) { var newTask Task if err := json.NewDecoder(r.Body).Decode(&newTask); err != nil { http.Error(w, "Invalid JSON", http.StatusBadRequest) return }
mu.Lock() newTask.ID = nextID nextID++ tasks = append(tasks, newTask) mu.Unlock()
w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusCreated) json.NewEncoder(w).Encode(newTask)}3.3. ID द्वारा प्राप्त करना, अपडेट करना और हटाना
इन ऑपरेशनों के लिए, हमें URL से ID निकालने की आवश्यकता है। Go की मानक लाइब्रेरी में कोई बिल्ट-इन पाथ पार्सर नहीं है, इसलिए हम एक सरल उपयोगिता लिखेंगे: