𝗕𝘂𝗶𝗹𝗱𝗶𝗻𝗴 𝗠𝘆 𝗙𝗶𝗿𝘀𝘁 𝗥𝗲𝗮𝗹 𝗔𝗣𝗜 𝗶𝗻 𝗚𝗼 𝘄𝗶𝘁𝗵 𝗚𝗶𝗻

मी आता सिद्धांताकडून (theory) प्रत्यक्ष कृतीकडे (practice) वळत आहे.

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 देखील वापरले आहेत. यामुळे आवश्यक फील्ड्स (required fields) उपलब्ध आहेत आणि रक्कम शून्यापेक्षा जास्त आहे याची खात्री होते.

• पर्सिस्टन्स आणि कन्करन्सी (Persistence and Concurrency) सध्याच्या व्हर्जनमध्ये in-memory store वापरले आहे. कन्करंट ॲक्सेस (concurrent access) व्यवस्थापित करण्यासाठी मी sync.RWMutex वापरले आहे. यामुळे एकाच वेळी अनेक reads शक्य होतात, परंतु writes सुरक्षित राहतात.

• इंटरफेसेस (Interfaces) handler हा OrderStore interface वर अवलंबून आहे. डेटा मेमरीमध्ये आहे की डेटाबेसमध्ये, याने त्याला फरक पडत नाही. यामुळे स्टोरेज लेयर बदलणे सोपे होते.

• एरर हँडलिंग (Error Handling) ErrNotFound सारख्या विशिष्ट एरर्स तपासण्यासाठी मी errors.Is वापरले आहे. यामुळे API वापरकर्त्याला योग्य 404 status code परत करू शकते.

• मिडलवेअर (Middleware) मी एक कस्टम logger तयार केला आहे. तो method, path, status code आणि request duration ट्रॅक करतो.

ही मांडणी मागील भागांमध्ये शिकलेल्या सर्व गोष्टी एकत्र आणते. हे एक कार्यात्मक (functional), सुव्यवस्थित (structured) आणि स्केलेबल (scalable) पाया आहे.

तुम्ही तुमचे Go प्रोजेक्ट्स कसे स्ट्रक्चर करता? तुम्हाला flat packages आवडतात की खोल, domain-driven nesting?

स्रोत (Source): https://dev.to/mihirmohapatra/building-my-first-real-api-in-go-with-gin-3kio