Kutengeneza API Yangu ya Kwanza Halisi katika Go kwa kutumia Gin
Ninahamia kutoka nadharia kwenda kwenye vitendo.
Baada ya kusoma structs, interfaces, goroutines, na error handling, nilitengeneza API ya Oda (Orders API) inayofanya kazi kwa kutumia Go na framework ya Gin.
API hii inatekeleza kazi tatu:
- Kutengeneza oda
- Kupata oda kwa kutumia ID
- Kuorodhesha oda zote
Nilichagua Gin kwa sababu inarahisisha routing na middleware. Inatoa kazi saidizi (helper functions) kama c.JSON na c.AbortWithStatusJSON. Zana hizi huondoa msimbo (code) unaojirudia.
Muundo wa Mradi: Nilitumia mpangilio wa kifurushi bapa (flat package layout) ili kuweka mambo katika mpangilio safi:
- handler: Inasimamia mantiki ya HTTP.
- model: Inafafanua maumbo ya data.
- store: Inashughulikia uhifadhi wa data.
- middleware: Inasimamia uandishi wa kumbukumbu (logging) na maombi (requests).
Chaguzi Muhimu za Kiufundi:
• Uhakiki wa Data (Data Validation) Nilitumia struct tags kwa ajili ya JSON serialization. Pia nilitumia Gin binding tags. Hii inahakikisha kuwa sehemu zinazohitajika zipo na kiasi (amounts) ni zaidi ya sifuri.
• Uhifadhi na Usanidi wa Wakati Mmoja (Persistence and Concurrency)
Toleo la sasa linatumia in-memory store. Nilitumia sync.RWMutex kusimamia ufikiaji wa wakati mmoja (concurrent access). Hii inaruhusu kusoma mara nyingi lakini inafanya uandishi uwe salama.
• Interfaces
Handler inategemea interface ya OrderStore. Haijali kama data imehifadhiwa kwenye memory au kwenye database. Hii inafanya ubadilishaji wa tabaka la uhifadhi (storage layer) kuwa rahisi.
• Kushughulikia Makosa (Error Handling)
Nilitumia errors.Is kukagua makosa maalum kama ErrNotFound. Hii inaruhusu API kurudisha kodi ya hali ya 404 (404 status code) inayofaa kwa mtumiaji.
• Middleware Nilitengeneza logger maalum. Inafuatilia method, path, status code, na muda wa ombi (request duration).
Mpangilio huu unakusanya kila kitu kilichojifunzwa katika sehemu zilizopita. Ni msingi unaofanya kazi, uliojipanga, na unaoweza kupanuliwa (scalable).
Je, unapangaje miradi yako ya Go? Je, unapendelea vifurushi bapa (flat packages) au mpangilio wa ndani wenye kina unaoongozwa na nyanja (deep, domain-driven nesting)?
Chanzo: https://dev.to/mihirmohapatra/building-my-first-real-api-in-go-with-gin-3kio