𝗠𝗲𝗺𝗯𝗶𝗻𝗮 𝗔𝗣𝗜 𝗦𝗲𝗯𝗲𝗻𝗮𝗿 𝗣𝗲𝗿𝘁𝗮𝗺𝗮 𝗦𝗮𝘆𝗮 𝗱𝗮𝗹𝗮𝗺 𝗚𝗼 𝗱𝗲𝗻𝗴𝗮𝗻 𝗚𝗶𝗻
Saya sedang beralih daripada teori kepada praktikal.
Selepas mempelajari struct, interface, goroutine, dan pengendalian ralat, saya telah membina satu API Pesanan (Orders API) yang berfungsi menggunakan Go dan rangka kerja Gin.
API ini melaksanakan tiga tugas:
- Mencipta pesanan
- Mengambil pesanan mengikut ID
- Menyenaraikan semua pesanan
Saya memilih Gin kerana ia memudahkan penghalaan (routing) dan middleware. Ia menyediakan fungsi pembantu seperti c.JSON dan c.AbortWithStatusJSON. Alatan ini mengurangkan kod yang berulang.
Struktur Projek: Saya menggunakan susun atur pakej yang rata (flat package layout) untuk memastikan semuanya kemas:
- handler: Menguruskan logik HTTP.
- model: Mentakrifkan bentuk data.
- store: Mengendalikan penyimpanan data.
- middleware: Menguruskan log dan permintaan.
Pilihan Teknikal Utama:
• Pengesahan Data Saya menggunakan tag struct untuk penserialan JSON. Saya juga menggunakan tag pengikatan (binding tags) Gin. Ini memastikan medan yang diperlukan wujud dan jumlah adalah lebih besar daripada sifar.
• Persistensi dan Keserentakan
Versi semasa menggunakan stor dalam memori (in-memory store). Saya menggunakan sync.RWMutex untuk menguruskan akses serentak. Ini membolehkan pembacaan berbilang tetapi memastikan penulisan kekal selamat.
• Antara Muka (Interfaces)
Handler bergantung pada antara muka OrderStore. Ia tidak peduli sama ada data disimpan dalam memori atau pangkalan data. Ini memudahkan pertukaran lapisan storan.
• Pengendalian Ralat
Saya menggunakan errors.Is untuk menyemak ralat khusus seperti ErrNotFound. Ini membolehkan API mengembalikan kod status 404 yang betul kepada pengguna.
• Middleware Saya membina logger tersuai. Ia menjejaki kaedah, laluan, kod status, dan tempoh permintaan.
Tetapan ini menggabungkan semua yang telah dipelajari dalam bahagian sebelum ini. Ia merupakan satu asas yang berfungsi, berstruktur, dan boleh skala.
Bagaimanakah anda menyusun struktur projek Go anda? Adakah anda lebih suka pakej yang rata atau susunan sarang (nesting) yang mendalam berasaskan domain?
Sumber: https://dev.to/mihirmohapatra/building-my-first-real-api-in-go-with-gin-3kio