Skip to content
/ halolight-api-go Public template

๐Ÿน Go ๅŽ็ซฏ API Backend - Gin/Fiber, JWT Auth, RBAC ๆƒ้™, PostgreSQL, Redis, Swagger ๆ–‡ๆกฃ โ†’ halolight-api-go.h7ml.cn

Notifications You must be signed in to change notification settings

halolight/halolight-api-go

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

3 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

HaloLight API Go

License Go Gin GORM

HaloLight ๅŽๅฐ็ฎก็†็ณป็ปŸ็š„ Go ้ซ˜ๆ€ง่ƒฝๅŽ็ซฏ API ๆœๅŠก๏ผŒๅŸบไบŽ Gin + GORM ๆž„ๅปบ็š„ RESTful APIใ€‚

็‰นๆ€ง

  • Gin Web Framework - ้ซ˜ๆ€ง่ƒฝ HTTP ๆก†ๆžถ
  • GORM - ๅผบๅคง็š„ ORM ๅบ“
  • JWT ่ฎค่ฏ - ๅŸบไบŽไปค็‰Œ็š„่บซไปฝ้ชŒ่ฏ
  • PostgreSQL - ็”Ÿไบง็บงๆ•ฐๆฎๅบ“
  • RESTful API - ๆ ‡ๅ‡†็š„ REST ๆŽฅๅฃ่ฎพ่ฎก
  • Docker ๆ”ฏๆŒ - ๅฎนๅ™จๅŒ–้ƒจ็ฝฒ
  • ๅฎŒๅ–„็š„้”™่ฏฏๅค„็† - ็ปŸไธ€็š„้”™่ฏฏๅ“ๅบ”ๆ ผๅผ
  • ่พ“ๅ…ฅ้ชŒ่ฏ - ๅŸบไบŽ Gin binding ็š„่‡ชๅŠจ้ชŒ่ฏ

ๆŠ€ๆœฏๆ ˆ

  • Go 1.21+
  • Gin 1.10 - Web ๆก†ๆžถ
  • GORM 1.25 - ORM
  • PostgreSQL 15+ - ๆ•ฐๆฎๅบ“
  • JWT (golang-jwt/jwt/v5) - ่ฎค่ฏ
  • bcrypt - ๅฏ†็ ๅ“ˆๅธŒ

ๅฟซ้€Ÿๅผ€ๅง‹

ๅ‰็ฝฎ่ฆๆฑ‚

  • Go 1.21 ๆˆ–ๆ›ด้ซ˜็‰ˆๆœฌ
  • PostgreSQL 15+
  • Docker (ๅฏ้€‰)

ๅฎ‰่ฃ…

# ๅ…‹้š†ไป“ๅบ“
git clone https://github.com/halolight/halolight-api-go.git
cd halolight-api-go

# ๅฎ‰่ฃ…ไพ่ต–
go mod tidy

# ๅคๅˆถ็Žฏๅขƒๅ˜้‡ๆ–‡ไปถ
cp .env.example .env

# ็ผ–่พ‘ .env ๆ–‡ไปถ๏ผŒ้…็ฝฎๆ•ฐๆฎๅบ“่ฟžๆŽฅ็ญ‰ไฟกๆฏ
# vim .env

# ๅฏๅŠจๅผ€ๅ‘ๆœๅŠกๅ™จ
make dev

# ๆˆ–็›ดๆŽฅ่ฟ่กŒ
go run ./cmd/server

ไฝฟ็”จ Docker

# ๅฏๅŠจๆ‰€ๆœ‰ๆœๅŠก๏ผˆAPI + PostgreSQL๏ผ‰
make docker-up

# ๆŸฅ็œ‹ๆ—ฅๅฟ—
make docker-logs

# ๅœๆญขๆœๅŠก
make docker-down

ๅฏ็”จๅ‘ฝไปค

make dev            # ๅฏๅŠจๅผ€ๅ‘ๆœๅŠกๅ™จ
make build          # ็ผ–่ฏ‘ไบŒ่ฟ›ๅˆถๆ–‡ไปถ
make run            # ็ผ–่ฏ‘ๅนถ่ฟ่กŒ
make test           # ่ฟ่กŒๆต‹่ฏ•
make test-coverage  # ่ฟ่กŒๆต‹่ฏ•ๅนถ็”Ÿๆˆ่ฆ†็›–็އๆŠฅๅ‘Š
make lint           # ่ฟ่กŒไปฃ็ ๆฃ€ๆŸฅ
make tidy           # ๆ•ด็† Go ๆจกๅ—ไพ่ต–
make docker-build   # ๆž„ๅปบ Docker ้•œๅƒ
make docker-up      # ๅฏๅŠจ Docker ๅฎนๅ™จ
make docker-down    # ๅœๆญข Docker ๅฎนๅ™จ
make docker-logs    # ๆŸฅ็œ‹ Docker ๆ—ฅๅฟ—
make clean          # ๆธ…็†ๆž„ๅปบไบง็‰ฉ
make help           # ๆ˜พ็คบๅธฎๅŠฉไฟกๆฏ

้กน็›ฎ็ป“ๆž„

halolight-api-go/
โ”œโ”€โ”€ cmd/
โ”‚   โ””โ”€โ”€ server/
โ”‚       โ””โ”€โ”€ main.go              # ๅบ”็”จๅ…ฅๅฃ
โ”œโ”€โ”€ internal/
โ”‚   โ”œโ”€โ”€ handlers/                # HTTP ๅค„็†ๅ™จ
โ”‚   โ”‚   โ”œโ”€โ”€ auth_handler.go      # ่ฎค่ฏๅค„็†ๅ™จ
โ”‚   โ”‚   โ””โ”€โ”€ user_handler.go      # ็”จๆˆทๅค„็†ๅ™จ
โ”‚   โ”œโ”€โ”€ models/                  # ๆ•ฐๆฎๆจกๅž‹
โ”‚   โ”‚   โ””โ”€โ”€ user.go              # ็”จๆˆทๆจกๅž‹
โ”‚   โ”œโ”€โ”€ services/                # ไธšๅŠก้€ป่พ‘ๅฑ‚
โ”‚   โ”‚   โ”œโ”€โ”€ auth_service.go      # ่ฎค่ฏๆœๅŠก
โ”‚   โ”‚   โ””โ”€โ”€ user_service.go      # ็”จๆˆทๆœๅŠก
โ”‚   โ”œโ”€โ”€ middleware/              # ไธญ้—ดไปถ
โ”‚   โ”‚   โ”œโ”€โ”€ auth.go              # JWT ่ฎค่ฏไธญ้—ดไปถ
โ”‚   โ”‚   โ””โ”€โ”€ cors.go              # CORS ไธญ้—ดไปถ
โ”‚   โ”œโ”€โ”€ repository/              # ๆ•ฐๆฎ่ฎฟ้—ฎๅฑ‚
โ”‚   โ”‚   โ””โ”€โ”€ user_repository.go   # ็”จๆˆทๆ•ฐๆฎไป“ๅบ“
โ”‚   โ””โ”€โ”€ routes/                  # ่ทฏ็”ฑๅฎšไน‰
โ”‚       โ””โ”€โ”€ router.go            # ่ทฏ็”ฑ้…็ฝฎ
โ”œโ”€โ”€ pkg/
โ”‚   โ”œโ”€โ”€ config/                  # ้…็ฝฎ็ฎก็†
โ”‚   โ”‚   โ””โ”€โ”€ config.go
โ”‚   โ”œโ”€โ”€ database/                # ๆ•ฐๆฎๅบ“่ฟžๆŽฅ
โ”‚   โ”‚   โ””โ”€โ”€ database.go
โ”‚   โ””โ”€โ”€ utils/                   # ๅทฅๅ…ทๅ‡ฝๆ•ฐ
โ”‚       โ”œโ”€โ”€ jwt.go               # JWT ๅทฅๅ…ท
โ”‚       โ””โ”€โ”€ hash.go              # ๅฏ†็ ๅ“ˆๅธŒๅทฅๅ…ท
โ”œโ”€โ”€ .env.example                 # ็Žฏๅขƒๅ˜้‡็คบไพ‹
โ”œโ”€โ”€ .gitignore
โ”œโ”€โ”€ Dockerfile                   # Docker ้…็ฝฎ
โ”œโ”€โ”€ docker-compose.yml           # Docker Compose ้…็ฝฎ
โ”œโ”€โ”€ Makefile                     # Make ๅ‘ฝไปค
โ”œโ”€โ”€ go.mod                       # Go ๆจกๅ—ๅฎšไน‰
โ””โ”€โ”€ README.md

API ็ซฏ็‚น

่ฎค่ฏ (Public)

ๆ–นๆณ• ่ทฏๅพ„ ๆ่ฟฐ
POST /api/auth/register ็”จๆˆทๆณจๅ†Œ
POST /api/auth/login ็”จๆˆท็™ปๅฝ•

็”จๆˆท็ฎก็† (Protected - ้œ€่ฆ่ฎค่ฏ)

ๆ–นๆณ• ่ทฏๅพ„ ๆ่ฟฐ
GET /api/users ่Žทๅ–็”จๆˆทๅˆ—่กจ๏ผˆๅˆ†้กต๏ผ‰
GET /api/users/:id ่Žทๅ–ๅ•ไธช็”จๆˆท
POST /api/users ๅˆ›ๅปบๆ–ฐ็”จๆˆท
PUT /api/users/:id ๆ›ดๆ–ฐ็”จๆˆทไฟกๆฏ
DELETE /api/users/:id ๅˆ ้™ค็”จๆˆท

ๅฅๅบทๆฃ€ๆŸฅ

ๆ–นๆณ• ่ทฏๅพ„ ๆ่ฟฐ
GET /health ๅฅๅบทๆฃ€ๆŸฅ

API ็คบไพ‹

ๆณจๅ†Œ

curl -X POST http://localhost:8080/api/auth/register \
  -H "Content-Type: application/json" \
  -d '{
    "email": "user@example.com",
    "username": "johndoe",
    "password": "password123"
  }'

็™ปๅฝ•

curl -X POST http://localhost:8080/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{
    "email": "user@example.com",
    "password": "password123"
  }'

่Žทๅ–็”จๆˆทๅˆ—่กจ๏ผˆ้œ€่ฆ่ฎค่ฏ๏ผ‰

curl -X GET http://localhost:8080/api/users?page=1&page_size=20 \
  -H "Authorization: Bearer YOUR_JWT_TOKEN"

็Žฏๅขƒๅ˜้‡

ๅ˜้‡ๅ ่ฏดๆ˜Ž ้ป˜่ฎคๅ€ผ
APP_ENV ๅบ”็”จ็Žฏๅขƒ development
APP_PORT ๆœๅŠก็ซฏๅฃ 8080
JWT_SECRET JWT ๅฏ†้’ฅ change-me-in-production
JWT_EXPIRE_MINUTES JWT ่ฟ‡ๆœŸๆ—ถ้—ด๏ผˆๅˆ†้’Ÿ๏ผ‰ 60
DB_HOST ๆ•ฐๆฎๅบ“ไธปๆœบ localhost
DB_PORT ๆ•ฐๆฎๅบ“็ซฏๅฃ 5432
DB_USER ๆ•ฐๆฎๅบ“็”จๆˆท postgres
DB_PASSWORD ๆ•ฐๆฎๅบ“ๅฏ†็  postgres
DB_NAME ๆ•ฐๆฎๅบ“ๅ็งฐ halolight
DB_SSLMODE SSL ๆจกๅผ disable

ๆžถๆž„่ฎพ่ฎก

ๅˆ†ๅฑ‚ๆžถๆž„

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚         HTTP Handlers               โ”‚  โ† ่ฏทๆฑ‚ๅ…ฅๅฃ๏ผŒๅ‚ๆ•ฐ้ชŒ่ฏ
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
              โ†“
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚          Services                   โ”‚  โ† ไธšๅŠก้€ป่พ‘๏ผŒไบ‹ๅŠก็ฎก็†
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
              โ†“
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚        Repository                   โ”‚  โ† ๆ•ฐๆฎ่ฎฟ้—ฎ๏ผŒCRUD ๆ“ไฝœ
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
              โ†“
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚         Database (GORM)             โ”‚  โ† PostgreSQL
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

่ฎค่ฏๆต็จ‹

  1. ็”จๆˆท็™ปๅฝ• โ†’ ้ชŒ่ฏๅ‡ญๆฎ
  2. ็”Ÿๆˆ JWT token๏ผˆๅŒ…ๅซ user_id๏ผ‰
  3. ๅฎขๆˆท็ซฏๅœจๅŽ็ปญ่ฏทๆฑ‚ไธญๆบๅธฆ token
  4. AuthMiddleware ้ชŒ่ฏ token
  5. ไปŽ token ๆๅ– user_id ๅนถๆณจๅ…ฅๅˆฐ context
  6. ไธšๅŠก้€ป่พ‘ๅฏ้€š่ฟ‡ context ่Žทๅ–ๅฝ“ๅ‰็”จๆˆท

ๅผ€ๅ‘ๆŒ‡ๅ—

ๆทปๅŠ ๆ–ฐ็š„ API ็ซฏ็‚น

  1. ๅฎšไน‰ๆจกๅž‹ (internal/models/)
  2. ๅˆ›ๅปบ Repository (internal/repository/)
  3. ๅฎž็Žฐ Service (internal/services/)
  4. ๆทปๅŠ  Handler (internal/handlers/)
  5. ๆณจๅ†Œ่ทฏ็”ฑ (internal/routes/router.go)

่ฟ่กŒๆต‹่ฏ•

# ่ฟ่กŒๆ‰€ๆœ‰ๆต‹่ฏ•
make test

# ่ฟ่กŒๆต‹่ฏ•ๅนถ็”Ÿๆˆ่ฆ†็›–็އๆŠฅๅ‘Š
make test-coverage

# ๆŸฅ็œ‹่ฆ†็›–็އๆŠฅๅ‘Š๏ผˆไผšๅœจๆต่งˆๅ™จๆ‰“ๅผ€๏ผ‰
open coverage.html

ไปฃ็ ่ง„่Œƒ

# ๆ ผๅผๅŒ–ไปฃ็ 
go fmt ./...

# ่ฟ่กŒ linter๏ผˆ้œ€่ฆๅฎ‰่ฃ… golangci-lint๏ผ‰
make lint

้ƒจ็ฝฒ

Docker ้ƒจ็ฝฒ

# ๆž„ๅปบ้•œๅƒ
make docker-build

# ไฝฟ็”จ docker-compose ๅฏๅŠจ
make docker-up

ไบŒ่ฟ›ๅˆถ้ƒจ็ฝฒ

# ็ผ–่ฏ‘็”Ÿไบง็‰ˆๆœฌ
make build

# ่ฟ่กŒไบŒ่ฟ›ๅˆถ
./bin/halolight-api

็Žฏๅขƒๅ˜้‡้…็ฝฎ

็”Ÿไบง็Žฏๅขƒๅปบ่ฎฎ้€š่ฟ‡็ณป็ปŸ็Žฏๅขƒๅ˜้‡ๆˆ–้…็ฝฎ็ฎก็†ๅทฅๅ…ท๏ผˆๅฆ‚ Kubernetes ConfigMap/Secret๏ผ‰ๆณจๅ…ฅ้…็ฝฎ๏ผŒ่€Œไธๆ˜ฏไฝฟ็”จ .env ๆ–‡ไปถใ€‚

ๅฎ‰ๅ…จๆœ€ไฝณๅฎž่ทต

  • โœ… ๅฏ†็ ไฝฟ็”จ bcrypt ๅ“ˆๅธŒ๏ผˆcost=10๏ผ‰
  • โœ… JWT ็ญพๅ้ชŒ่ฏ๏ผˆHS256๏ผ‰
  • โœ… CORS ไธญ้—ดไปถ้…็ฝฎ
  • โœ… ่พ“ๅ…ฅ้ชŒ่ฏ๏ผˆGin binding๏ผ‰
  • โœ… SQL ๆณจๅ…ฅ้˜ฒๆŠค๏ผˆGORM ๅ‚ๆ•ฐๅŒ–ๆŸฅ่ฏข๏ผ‰
  • โœ… ้”™่ฏฏไฟกๆฏไธๆณ„้œฒๆ•ๆ„Ÿๆ•ฐๆฎ
  • โš ๏ธ ็”Ÿไบง็ŽฏๅขƒๅŠกๅฟ…ไฟฎๆ”น JWT_SECRET
  • โš ๏ธ ็”Ÿไบง็Žฏๅขƒๅปบ่ฎฎไฝฟ็”จ HTTPS
  • โš ๏ธ ่€ƒ่™‘ๆทปๅŠ ้€Ÿ็އ้™ๅˆถไธญ้—ดไปถ

ๆ€ง่ƒฝ

  • ๅนถๅ‘ๅค„็†: Gin ๅŸบไบŽ goroutine๏ผŒๆ”ฏๆŒ้ซ˜ๅนถๅ‘
  • ๆ•ฐๆฎๅบ“่ฟžๆŽฅๆฑ : GORM ่‡ชๅŠจ็ฎก็†่ฟžๆŽฅๆฑ 
  • ๅ†…ๅญ˜ๅ ็”จ: ~20-30MB๏ผˆ็ฉบ่ฝฝ๏ผ‰
  • ๅ“ๅบ”ๆ—ถ้—ด: < 10ms (P99, ๆ— ๆ•ฐๆฎๅบ“ๆŸฅ่ฏข)

ๆ•…้šœๆŽ’ๆŸฅ

ๅธธ่ง้—ฎ้ข˜

้—ฎ้ข˜: ๆ— ๆณ•่ฟžๆŽฅๆ•ฐๆฎๅบ“

# ๆฃ€ๆŸฅ PostgreSQL ๆ˜ฏๅฆ่ฟ่กŒ
docker-compose ps

# ๆŸฅ็œ‹ๆ•ฐๆฎๅบ“ๆ—ฅๅฟ—
docker-compose logs db

้—ฎ้ข˜: JWT token ๆ— ๆ•ˆ

  • ็กฎ่ฎค JWT_SECRET ้…็ฝฎๆญฃ็กฎ
  • ๆฃ€ๆŸฅ token ๆ˜ฏๅฆ่ฟ‡ๆœŸ
  • ้ชŒ่ฏ Authorization header ๆ ผๅผ: Bearer <token>

้—ฎ้ข˜: ไพ่ต–ไธ‹่ฝฝๅคฑ่ดฅ

# ่ฎพ็ฝฎ Go ไปฃ็†๏ผˆไธญๅ›ฝ็”จๆˆท๏ผ‰
export GOPROXY=https://goproxy.cn,direct

# ้‡ๆ–ฐไธ‹่ฝฝ
go mod tidy

็›ธๅ…ณ้“พๆŽฅ

่ดก็Œฎ

ๆฌข่ฟŽๆไบค Issue ๅ’Œ Pull Request๏ผ

่ฎธๅฏ่ฏ

MIT


Made with โค๏ธ by HaloLight Team

About

๐Ÿน Go ๅŽ็ซฏ API Backend - Gin/Fiber, JWT Auth, RBAC ๆƒ้™, PostgreSQL, Redis, Swagger ๆ–‡ๆกฃ โ†’ halolight-api-go.h7ml.cn

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published