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

Saya sedang beralih dari teori ke praktik.

Setelah mempelajari struct, interface, goroutine, dan error handling, saya membangun sebuah Orders API yang berfungsi menggunakan Go dan framework Gin.

API ini melakukan tiga tugas:

  • Membuat pesanan
  • Mengambil pesanan berdasarkan ID
  • Menampilkan semua pesanan

Saya memilih Gin karena menyederhanakan routing dan middleware. Gin menyediakan fungsi pembantu seperti c.JSON dan c.AbortWithStatusJSON. Alat-alat ini menghilangkan kode yang berulang.

Struktur Proyek: Saya menggunakan tata letak paket yang datar agar tetap rapi:

  • handler: Mengelola logika HTTP.
  • model: Mendefinisikan bentuk data.
  • store: Menangani penyimpanan data.
  • middleware: Mengelola logging dan permintaan.

Pilihan Teknis Utama:

• Validasi Data Saya menggunakan struct tags untuk serialisasi JSON. Saya juga menggunakan Gin binding tags. Hal ini memastikan bahwa field yang wajib ada telah terpenuhi dan jumlahnya lebih besar dari nol.

• Persistensi dan Konkurensi Versi saat ini menggunakan in-memory store. Saya menggunakan sync.RWMutex untuk mengelola akses konkuren. Ini memungkinkan pembacaan ganda tetapi tetap menjaga keamanan penulisan.

• Interface Handler bergantung pada interface OrderStore. Ia tidak peduli apakah data tersebut berada di memori atau di database. Hal ini memudahkan penggantian lapisan penyimpanan.

• Penanganan Error Saya menggunakan errors.Is untuk memeriksa error spesifik seperti ErrNotFound. Ini memungkinkan API untuk mengembalikan kode status 404 yang tepat kepada pengguna.

• Middleware Saya membangun logger kustom. Logger ini melacak method, path, kode status, dan durasi permintaan.

Pengaturan ini menyatukan semua yang telah dipelajari di bagian sebelumnya. Ini adalah fondasi yang fungsional, terstruktur, dan skalabel.

Bagaimana Anda menyusun struktur proyek Go Anda? Apakah Anda lebih suka paket yang datar atau nesting berbasis domain yang dalam?

Sumber: https://dev.to/mihirmohapatra/building-my-first-real-api-in-go-with-gin-3kio