Gin के साथ Go में अपना पहला असली API बनाना

मैं थ्योरी से प्रैक्टिकल की ओर बढ़ रहा हूँ।

structs, interfaces, goroutines और error handling का अध्ययन करने के बाद, मैंने Go और Gin framework का उपयोग करके एक वर्किंग Orders API बनाया है।

यह API तीन कार्य करता है:

  • एक ऑर्डर बनाना (Create an order)
  • ID द्वारा ऑर्डर प्राप्त करना (Fetch an order by ID)
  • सभी ऑर्डर्स की सूची दिखाना (List all orders)

मैंने Gin को इसलिए चुना क्योंकि यह routing और middleware को सरल बनाता है। यह c.JSON और c.AbortWithStatusJSON जैसे helper functions प्रदान करता है। ये टूल्स बार-बार लिखे जाने वाले कोड (repetitive code) को कम करते हैं।

Project Structure: चीजों को व्यवस्थित रखने के लिए मैंने एक flat package layout का उपयोग किया है:

  • handler: HTTP logic को मैनेज करता है।
  • model: डेटा के स्वरूप (data shapes) को परिभाषित करता है।
  • store: डेटा स्टोरेज को संभालता है।
  • middleware: logging और requests को मैनेज करता है।

Key Technical Choices:

• Data Validation मैंने JSON serialization के लिए struct tags का उपयोग किया। मैंने Gin binding tags का भी उपयोग किया। यह सुनिश्चित करता है कि आवश्यक फ़ील्ड मौजूद हैं और राशि (amount) शून्य से अधिक है।

• Persistence and Concurrency वर्तमान वर्शन एक in-memory store का उपयोग करता है। मैंने concurrent access को मैनेज करने के लिए sync.RWMutex का उपयोग किया। यह एक साथ कई reads की अनुमति देता है लेकिन writes को सुरक्षित रखता है।

• Interfaces handler, OrderStore interface पर निर्भर करता है। इसे इससे फर्क नहीं पड़ता कि डेटा मेमोरी में है या डेटाबेस में। इससे स्टोरेज लेयर को बदलना आसान हो जाता है।

• Error Handling मैंने ErrNotFound जैसे विशिष्ट errors की जांच करने के लिए errors.Is का उपयोग किया। इससे API यूजर को सही 404 status code वापस कर पाता है।

• Middleware मैंने एक कस्टम logger बनाया है। यह method, path, status code और request duration को ट्रैक करता है।

यह सेटअप पिछले भागों में सीखी गई सभी चीजों को एक साथ लाता है। यह एक functional, structured और scalable आधार है।

आप अपने Go प्रोजेक्ट्स को कैसे स्ट्रक्चर करते हैं? क्या आप flat packages पसंद करते हैं या deep, domain-driven nesting?

Source: https://dev.to/mihirmohapatra/building-my-first-real-api-in-go-with-gin-3kio