परिचय: Go REST API के लिए आदर्श विकल्प क्यों है
Go (Golang) एक कंपाइल्ड प्रोग्रामिंग भाषा है, जिसे Google द्वारा उच्च-लोड सिस्टम के लिए बनाया गया है। यह C की गति, Python की सरलता और अंतर्निहित समवर्ती समर्थन को जोड़ती है। REST API बनाने के लिए Go शक्तिशाली मानक लाइब्रेरी net/http और लोकप्रिय फ्रेमवर्क जैसे gorilla/mux और gin प्रदान करता है।
इस गाइड में हम 30 मिनट में बिना किसी तृतीय-पक्ष फ्रेमवर्क के शुद्ध Go पर कार्य सूची (Todo List) प्रबंधन के लिए एक पूर्ण REST API बनाएंगे। आप सीखेंगे:
- रूटिंग और हैंडलर सेट करना
- JSON (सीरियलाइज़ेशन/डीसीरियलाइज़ेशन) के साथ काम करना
- CRUD संचालन (Create, Read, Update, Delete) लागू करना
- लॉगिंग और CORS के लिए मिडलवेयर जोड़ना
सरलता के लिए सारा कोड एक फ़ाइल main.go में लिखा जाएगा। चलिए शुरू करते हैं!
चरण 1: मूल संरचना और HTTP सर्वर प्रारंभ करना
एक फ़ाइल main.go बनाएं और निम्नलिखित कोड जोड़ें। हम कार्य के लिए एक डेटा संरचना घोषित करेंगे और एक सरल सर्वर प्रारंभ करेंगे।
package main
import ( "encoding/json" "log" "net/http" "strconv" "strings" "sync" "time")
// Task — कार्य की संरचनाtype Task struct { ID int `json:"id"` Title string `json:"title"` Completed bool `json:"completed"` CreatedAt time.Time `json:"created_at"`}
// कार्यों का भंडार (इन-मेमोरी)var ( tasks = make(map[int]Task) nextID = 1 mu sync.Mutex)
func main() { // रूट http.HandleFunc("/api/tasks", tasksHandler) http.HandleFunc("/api/tasks/", taskByIDHandler)
log.Println("सर्वर :8080 पर प्रारंभ हुआ") log.Fatal(http.ListenAndServe(":8080", nil))}व्याख्या:
Task— सही सीरियलाइज़ेशन के लिए JSON टैग वाली संरचना।tasks— मेमोरी में कार्यों को संग्रहीत करने के लिए मैप (बिना DB के)।mu— गोरूटीन से सुरक्षित पहुँच के लिए म्यूटेक्स।- दो रूट:
/api/tasks(सूची और निर्माण) और/api/tasks/(ID द्वारा एक कार्य के साथ काम करना)।
चरण 2: कार्य सूची के लिए हैंडलर (GET और POST)
हम tasksHandler फ़ंक्शन लागू करते हैं, जो GET (सभी कार्य प्राप्त करना) और POST (नया कार्य बनाना) को संभालता है।
func tasksHandler(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json")
switch r.Method { case http.MethodGet: mu.Lock() taskList := make([]Task, 0, len(tasks)) for _, task := range tasks { taskList = append(taskList, task) } mu.Unlock() json.NewEncoder(w).Encode(taskList)
case http.MethodPost: var newTask Task if err := json.NewDecoder(r.Body).Decode(&newTask); err != nil { http.Error(w, `{"error":"अमान्य JSON"}`, http.StatusBadRequest) return } mu.Lock() newTask.ID = nextID nextID++ newTask.CreatedAt = time.Now() tasks[newTask.ID] = newTask mu.Unlock()
w.WriteHeader(http.StatusCreated) json.NewEncoder(w).Encode(newTask)
default: http.Error(w, `{"error":"विधि समर्थित नहीं है"}`, http.StatusMethodNotAllowed) }}मुख्य बिंदु:
- JSON के साथ काम करने के लिए
json.NewEncoderऔरjson.NewDecoderका उपयोग करें। - POST पर JSON की वैधता जाँचें, ID निर्दिष्ट करें और 201 Created लौटाएँ।
- म्यूटेक्स समवर्ती पहुँच के दौरान डेटा की सुरक्षा करता है।
चरण 3: एकल कार्य के लिए हैंडलर (GET, PUT, DELETE)
अब हम taskByIDHandler लागू करते हैं। strings.TrimPrefix का उपयोग करके URL से ID निकालें