goapisuit: Framework Go สำหรับสร้าง API เร็วขึ้น แบบ Laravel
ใครที่เคยเขียน API ด้วย Go มาก่อน จะรู้ว่ามันรวดเร็วและมีประสิทธิภาพมาก แต่การตั้งโปรเจกต์ใหม่ทุกครั้ง ต้องเสียเวลา boilerplate ซ้ำๆ: สร้างโครงสร้างโฟลเดอร์, เชื่อม database, เขียน route handler, ทำ migration
โปรเจกต์ goapisuit เกิดขึ้นเพื่อแก้ปัญหานี้ โดยได้รับแรงบันดาลใจจาก Laravel นำแนวคิด “convention over configuration” มาสู่โลก Go
ปัญหาที่อยากแก้
การเริ่มโปรเจกต์ Go API ใหม่แต่ละครั้งมักต้องทำสิ่งเดิมซ้ำๆ:
- วางโครงสร้างโฟลเดอร์
cmd/,internal/models/,internal/routes/ - ตั้งค่าเชื่อม database และ ORM
- เขียน model และ route ตามรูปแบบที่คล้ายกันทุกครั้ง
- ทำ migration ด้วยมือ
ยิ่งมีหลาย module ยิ่งเสียเวลากับงานซ้ำ และมีโอกาสโครงสร้างไม่สม่ำเสมอในทีม
goapisuit ทำอะไรได้บ้าง
แกนหลักของโปรเจกต์คือ CLI tool ชื่อ heykrit ที่ช่วย scaffold โปรเจกต์และ generate โค้ดให้อัตโนมัติ
โดยรันบน GoFiber และใช้ GORM เป็น ORM
- สร้างโครงสร้างโปรเจกต์ใหม่ได้ในคำสั่งเดียว
- Generate model + route handler พร้อมกันด้วย
heykrit make <name> - ทำ database migration ผ่าน
heykrit db:migrate <name> - โครงสร้างโฟลเดอร์มาตรฐาน พร้อมใช้งานทันที
วิธีเริ่มใช้งาน
1. ติดตั้ง CLI:
go install -v github.com/krittakondev/goapisuit/cmd/heykrit@latest
2. สร้างโปรเจกต์ใหม่:
mkdir myapi
cd myapi
go mod init you/myapi
heykrit init
3. ตั้งค่า .env แล้วรัน:
go run cmd/server.go
ตัวอย่าง: สร้าง module ใหม่
เพียงคำสั่งเดียวได้ทั้ง model และ route:
heykrit make product
Generate ไฟล์ internal/routes/Product.go และ internal/models/Product.go พร้อมกัน จากนั้น migrate:
heykrit db:migrate product
โครงสร้างโปรเจกต์
myapi/
├── cmd/
│ └── server.go
├── internal/
│ ├── models/
│ └── routes/
├── public/
├── .env
├── go.mod
└── go.sum
โครงสร้างนี้ทำให้ทุก module อยู่ที่เดิมเสมอ ลดเวลา onboard สมาชิกใหม่ในทีม
สิ่งที่น่าสนใจในเชิงวิศวกรรม
- ใช้ GoFiber ซึ่งเป็น web framework ที่เร็วที่สุดตัวหนึ่งของ Go (อิงจาก Fasthttp)
- ใช้ GORM ทำให้ไม่ต้องเขียน raw SQL และรองรับ database migration แบบ struct-based
- แนวคิด code generation แทนการพิมพ์ boilerplate ทำให้โค้ดสม่ำเสมอทั้งโปรเจกต์
ไอเดียพัฒนาต่อ
- เพิ่ม middleware สำเร็จรูป เช่น auth, rate limiting
- รองรับ database เพิ่มเติมนอกจาก MySQL
- เพิ่ม test scaffolding ให้ generate test file ไปพร้อมกับ model/route
- ทำ interactive CLI สำหรับ init project
สรุป
goapisuit เป็นตัวอย่างของการนำแนวคิดที่ดีจาก framework อื่น (Laravel) มาปรับให้เหมาะกับ ecosystem ของ Go
เป้าหมายคือลด friction ในการเริ่มโปรเจกต์ใหม่ และทำให้ทีมเขียนโค้ดได้ตามรูปแบบเดียวกันโดยไม่ต้องตกลงกันซ้ำทุกครั้ง