Gin உதவியுடன் Go-வில் எனது முதல் உண்மையான API-ஐ உருவாக்குதல்
நான் கோட்பாட்டிலிருந்து (theory) நடைமுறைக்கு மாறுகிறேன்.
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-களை வழங்குகிறது. இந்த கருவிகள் மீண்டும் மீண்டும் வரும் குறியீடுகளை (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) இருப்பதை உறுதி செய்கிறது மற்றும் தொகைகள் (amounts) பூஜ்ஜியத்தை விட அதிகமாக இருப்பதை உறுதி செய்கிறது.
• நிலைத்தன்மை மற்றும் இணக்கத்தன்மை (Persistence and Concurrency)
தற்போதைய பதிப்பு an in-memory store-ஐப் பயன்படுத்துகிறது. ஒரே நேரத்தில் பல அணுகல்களை (concurrent access) நிர்வகிக்க நான் sync.RWMutex-ஐப் பயன்படுத்தினேன். இது பலமுறை வாசிப்பதற்கு (reads) அனுமதிக்கும் அதே வேளையில், எழுதுதல்களை (writes) பாதுகாப்பாக வைத்திருக்கும்.
• இடைமுகங்கள் (Interfaces)
handler ஆனது OrderStore interface-ஐச் சார்ந்துள்ளது. தரவு memory-யில் இருந்தாலும் அல்லது database-இல் இருந்தாலும் அது கவலைப்படுவதில்லை. இது storage layer-ஐ எளிதாக மாற்ற உதவுகிறது.
• பிழை கையாளுதல் (Error Handling)
ErrNotFound போன்ற குறிப்பிட்ட பிழைகளைச் சரிபார்க்க நான் errors.Is-ஐப் பயன்படுத்தினேன். இது API பயனருக்குச் சரியான 404 status code-ஐத் திருப்பி அனுப்ப அனுமதிக்கிறது.
• Middleware நான் ஒரு தனிப்பயன் logger-ஐ உருவாக்கினேன். இது method, path, status code மற்றும் request duration ஆகியவற்றைக் கண்காணிக்கிறது.
இந்த அமைப்பு முந்தைய பகுதிகளில் கற்ற அனைத்தையும் ஒருங்கிணைக்கிறது. இது ஒரு செயல்பாட்டு ரீதியிலான, கட்டமைக்கப்பட்ட மற்றும் விரிவாக்கக்கூடிய (scalable) அடித்தளமாகும்.
உங்கள் Go திட்டங்களை எவ்வாறு கட்டமைக்கிறீர்கள்? நீங்கள் flat packages-ஐ விரும்புகிறீர்களா அல்லது ஆழமான, domain-driven nesting-ஐ விரும்புகிறீர்களா?
ஆதாரம்: https://dev.to/mihirmohapatra/building-my-first-real-api-in-go-with-gin-3kio