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)
routing ಮತ್ತು middleware ಅನ್ನು ಸರಳಗೊಳಿಸುವುದರಿಂದ ನಾನು Gin ಅನ್ನು ಆರಿಸಿಕೊಂಡೆ. ಇದು c.JSON ಮತ್ತು c.AbortWithStatusJSON ನಂತಹ helper functions ಅನ್ನು ಒದಗಿಸುತ್ತದೆ. ಈ ಪರಿಕರಗಳು ಪುನರಾವರ್ತಿತ ಕೋಡ್ ಅನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತವೆ.
ಪ್ರಾಜೆಕ್ಟ್ ರಚನೆ (Project Structure): ವಿಷಯಗಳನ್ನು ಸ್ಪಷ್ಟವಾಗಿಡಲು ನಾನು flat package layout ಅನ್ನು ಬಳಸಿದ್ದೇನೆ:
- handler: HTTP logic ಅನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ.
- model: ಡೇಟಾ ರೂಪಗಳನ್ನು (data shapes) ವ್ಯಾಖ್ಯಾನಿಸುತ್ತದೆ.
- store: ಡೇಟಾ ಸಂಗ್ರಹಣೆಯನ್ನು (data storage) ನಿರ್ವಹಿಸುತ್ತದೆ.
- middleware: logging ಮತ್ತು requests ಅನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ.
ಪ್ರಮುಖ ತಾಂತ್ರಿಕ ಆಯ್ಕೆಗಳು (Key Technical Choices):
• Data Validation ನಾನು JSON serialization ಗಾಗಿ struct tags ಬಳಸಿದ್ದೇನೆ. ನಾನು Gin binding tags ಅನ್ನು ಸಹ ಬಳಸಿದ್ದೇನೆ. ಇದು ಅಗತ್ಯವಿರುವ ಫೀಲ್ಡ್ಗಳು ಇರುವುದನ್ನು ಮತ್ತು ಮೊತ್ತವು ಶೂನ್ಯಕ್ಕಿಂತ ಹೆಚ್ಚಿರಬೇಕೆಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ.
• Persistence and Concurrency
ಪ್ರಸ್ತುತ ಆವೃತ್ತಿಯು in-memory store ಅನ್ನು ಬಳಸುತ್ತದೆ. concurrent access ನಿರ್ವಹಿಸಲು ನಾನು sync.RWMutex ಅನ್ನು ಬಳಸಿದ್ದೇನೆ. ಇದು ಏಕಕಾಲದಲ್ಲಿ ಹಲವಾರು reads ಅನ್ನು ಅನುಮತಿಸುತ್ತದೆ ಆದರೆ writes ಅನ್ನು ಸುರಕ್ಷಿತವಾಗಿರಿಸುತ್ತದೆ.
• Interfaces handler ಎಂಬುದು OrderStore interface ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿದೆ. ಡೇಟಾ in-memory ನಲ್ಲಿರಲಿ ಅಥವಾ database ನಲ್ಲಿರಲಿ ಅದಕ್ಕೆ ವ್ಯತ್ಯಾಸವಿಲ್ಲ. ಇದು storage layer ಅನ್ನು ಬದಲಾಯಿಸುವುದನ್ನು ಸುಲಭಗೊಳಿಸುತ್ತದೆ.
• Error Handling
ErrNotFound ನಂತಹ ನಿರ್ದಿಷ್ಟ ದೋಷಗಳನ್ನು ಪರೀಕ್ಷಿಸಲು ನಾನು errors.Is ಅನ್ನು ಬಳಸಿದ್ದೇನೆ. ಇದು API ಬಳಕೆದಾರರಿಗೆ ಸರಿಯಾದ 404 status code ಅನ್ನು ಹಿಂತಿರುಗಿಸಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ.
• Middleware ನಾನು ಒಂದು custom logger ಅನ್ನು ನಿರ್ಮಿಸಿದ್ದೇನೆ. ಇದು method, path, status code ಮತ್ತು request duration ಅನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡುತ್ತದೆ.
ಈ ಸೆಟಪ್ ಹಿಂದಿನ ಭಾಗಗಳಲ್ಲಿ ಕಲಿತ ಎಲ್ಲವನ್ನೂ ಒಟ್ಟುಗೂಡಿಸುತ್ತದೆ. ಇದು ಕಾರ್ಯಗತ, ರಚನಾತ್ಮಕ ಮತ್ತು scalable ಅಡಿಪಾಯವಾಗಿದೆ.
ನೀವು ನಿಮ್ಮ Go ಪ್ರಾಜೆಕ್ಟ್ಗಳನ್ನು ಹೇಗೆ ರಚಿಸುತ್ತೀರಿ? ನೀವು flat packages ಅನ್ನು ಇಷ್ಟಪಡುತ್ತೀರಾ ಅಥವಾ ಆಳವಾದ, domain-driven nesting ಅನ್ನು ಇಷ್ಟಪಡುತ್ತೀರಾ?
ಮೂಲ (Source): https://dev.to/mihirmohapatra/building-my-first-real-api-in-go-with-gin-3kio