goapisuit: Framework Go สำหรับสร้าง API เร็วขึ้น แบบ Laravel

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 ในการเริ่มโปรเจกต์ใหม่ และทำให้ทีมเขียนโค้ดได้ตามรูปแบบเดียวกันโดยไม่ต้องตกลงกันซ้ำทุกครั้ง