REST API มาตรฐานมืออาชีพ พัฒนาด้วยภาษา Go พร้อมระบบรักษาความปลอดภัยและการจัดการโครงสร้างที่เป็นระเบียบ
- ⚡ Fiber v2 - Web Framework ที่รวดเร็วและเบาที่สุด
- 🗄️ GORM - ORM สำหรับจัดการ MySQL พร้อมระบบ Auto Migration
- 📄 Swagger UI - สร้าง API Documentation อัตโนมัติด้วย Swaggo
- 🔐 Bcrypt - การเข้ารหัสรหัสผ่านที่ปลอดภัยระดับสากล
- ⚙️ Dotenv - จัดการค่าคอนฟิกผ่านไฟล์ .env
โปรเจกต์นี้ใช้แนวคิด Modular Layered Architecture แยกหน้าที่ชัดเจน (SOC)
.
├── cmd/ # Entry point: จุดเริ่มต้นของโปรแกรม
│ └── main.go
├── handlers/ # Delivery Layer: รับ/ส่ง HTTP + Swagger Annotation
├── services/ # Business Logic Layer: Logic & Database Access
├── models/ # Data Models: Struct & Auto Migration
├── routes/ # Routing Layer: จัดการเส้นทาง API ทั้งหมด
├── middlewares/ # Middlewares: CORS & Data Filtering
├── docs/ # Swagger Files (Auto-generated)
├── .env # Environment Variables (Database, Port)
├── .gitignore # Git ignore rules
├── go.mod # Dependency Management
└── README.md # Documentation
| Library | Description |
|---|---|
| Fiber v2 | High-performance Web Framework |
| GORM | The fantastic ORM library for Golang |
| Bcrypt | Password hashing algorithm |
| Godotenv | Load environment variables from .env |
| Swaggo | Automatically generate RESTful API documentation |
ติดตั้ง swag CLI เพื่อใช้สร้างเอกสาร API:
go install github.com/swaggo/swag/cmd/swag@latestสร้างไฟล์ .env ที่ Root Directory และกำหนดค่าดังนี้:
DB_DSN=root:your_password@tcp(127.0.0.1:3306)/your_db_name?charset=utf8mb4&parseTime=True&loc=Local
PORT=3000ตัวอย่าง:
DB_DSN=admin:password123@tcp(localhost:3306)/member_db?charset=utf8mb4&parseTime=True&loc=Local
PORT=8080# ติดตั้ง library
go mod tidy
# รันโปรเจกต์ (ระบบจะทำการ Auto Migrate ตารางให้ทันที)
go run cmd/main.goทุกครั้งที่มีการเพิ่มหรือแก้ไข Comment ใน Handlers ให้รันคำสั่งอัปเดต Docs:
# Windows PowerShell
& "$(go env GOPATH)\bin\swag" init -g cmd/main.go
# Linux / macOS
swag init -g cmd/main.goเข้าดู API Docs ได้ที่:
http://localhost:3000/swagger
ไม่ต้องเขียน SQL เอง! เมื่อคุณแก้ไข Struct ใน models/ ระบบจะปรับโครงสร้างตารางใน MySQL ให้ตรงกันอัตโนมัติเมื่อรันโปรแกรม พร้อมระบบ Log แจ้งเตือนสถานะการ Migration
// models/member.go ตัวอย่าง
type Member struct {
ID uint `gorm:"primaryKey"`
Name string
Email string `gorm:"uniqueIndex"`
}- Password Hashing: เข้ารหัสผ่านด้วย Bcrypt ก่อนบันทึก (ห้ามเก็บ Plain Text)
- CORS Middleware: แยกไฟล์ไว้ที่
middlewares/เพื่อความสะอาด และอนุญาตเฉพาะ Header ที่จำเป็น - Hidden Sensitive Data: ใช้ MemberRequest (DTO) เพื่อซ่อนฟิลด์ที่ไม่จำเป็นในหน้า Swagger
ย้ายการประกาศเส้นทาง API ทั้งหมดไปไว้ใน routes/routes.go ทำให้ main.go สั้นและอ่านง่ายขึ้น