Files
drd_vic ffd52b4c8f chore: 添加数据库文件到 gitignore 并清理已提交的数据库
- 在 .gitignore 中添加 data.db 以排除数据库文件
- 删除之前提交的 backend/data.db 文件
- 防止包含敏感数据的数据库文件被意外提交到版本控制中
2025-11-14 19:52:11 +08:00
..

WebDemo 后端服务

这是一个使用 Go 语言和 SQLite 数据库构建的 RESTful API 后端服务,实现了用户认证和文章管理功能。

功能特性

  • 用户系统

    • 用户注册和登录
    • 用户信息查询、更新和删除
    • 密码安全加密存储
  • 文章管理

    • 公开文章列表和详情查询
    • 用户个人文章的创建、更新和删除
    • 作者关联和权限控制
  • 系统特性

    • SQLite 数据库支持
    • 完善的日志记录
    • 优雅的错误处理和响应格式化
    • 中间件支持
    • 健康检查端点

技术栈

  • 开发语言: Go 1.25.4
  • Web框架: Gin
  • 数据库: SQLite
  • 认证: JWT
  • 日志: logrus
  • 验证: go-playground/validator

项目结构

backend
│  data.db
│  go.mod
│  go.sum
│  main.go
│  WebDemo.exe
├─api
│  │  router.go
│  ├─handler
│  │      article_handler.go
│  │      user_handler.go
│  └─middleware
│          auth.go
│          logger.go
│          recovery.go
├─config
│      config.go
├─internal
│  ├─model
│  │      article.go
│  │      user.go
│  ├─repository
│  │      article_repository.go
│  │      user_repository.go
│  └─service
│          article_service.go
│          user_service.go
├─pkg
│  ├─auth
│  │      jwt.go
│  ├─common
│  │      errors.go
│  │      response.go
│  └─database
│          sqlite.go
├─scripts
│      init.sql
└─test
        test-api.ps1

环境要求

  • Go 1.25.4 或更高版本
  • 系统支持Windows、Linux、macOS

安装与配置

1. 克隆项目

git clone <repository-url>
cd WebDemo/backend

2. 安装依赖

go mod tidy

3. 配置环境变量

可以通过环境变量自定义配置(可选):

环境变量 说明 默认值
SERVER_PORT 服务器端口 8080
DB_PATH 数据库文件路径 data.db
LOG_LEVEL 日志级别 info
JWT_SECRET JWT签名密钥 your-very-secure-secret-key-change-it-in-production
JWT_EXPIRY_HOURS JWT过期时间小时 24

4. 编译运行

编译为可执行文件:

# Windows
go build -o WebDemo.exe

# Linux/macOS
go build -o WebDemo

直接运行:

go run main.go

API文档

健康检查

  • GET /health
    • 描述:检查服务健康状态
    • 响应:{"status": "ok"}

用户认证

  • POST /api/v1/auth/register

    • 描述:用户注册
    • 请求体:
      {
        "username": "用户名",
        "email": "邮箱",
        "password": "密码"
      }
      
  • POST /api/v1/auth/login

    • 描述:用户登录
    • 请求体:
      {
        "email": "邮箱",
        "password": "密码"
      }
      
    • 成功响应:
      {
        "token": "JWT令牌",
        "user": {
          "id": 1,
          "username": "用户名",
          "email": "邮箱",
          "created_at": "时间戳"
        }
      }
      

用户管理(需认证)

  • GET /api/v1/users/me

    • 描述:获取当前用户信息
    • 头部:Authorization: Bearer <token>
  • PUT /api/v1/users/me

    • 描述:更新当前用户信息
    • 头部:Authorization: Bearer <token>
    • 请求体:
      {
        "username": "新用户名(可选)",
        "email": "新邮箱(可选)",
        "password": "新密码(可选)"
      }
      
  • DELETE /api/v1/users/me

    • 描述:删除当前用户账号
    • 头部:Authorization: Bearer <token>

文章管理

公开接口

  • GET /api/v1/articles

    • 描述:获取文章列表
    • 查询参数:page(页码), limit(每页数量)
  • GET /api/v1/articles/:id

    • 描述:获取指定文章详情

需要认证的接口

  • POST /api/v1/articles

    • 描述:创建新文章
    • 头部:Authorization: Bearer <token>
    • 请求体:
      {
        "title": "文章标题",
        "content": "文章内容"
      }
      
  • GET /api/v1/articles/my

    • 描述:获取当前用户的文章列表
    • 头部:Authorization: Bearer <token>
  • PUT /api/v1/articles/:id

    • 描述:更新文章(仅限作者)
    • 头部:Authorization: Bearer <token>
    • 请求体:
      {
        "title": "新标题(可选)",
        "content": "新内容(可选)"
      }
      
  • DELETE /api/v1/articles/:id

    • 描述:删除文章(仅限作者)
    • 头部:Authorization: Bearer <token>

默认账号信息

系统初始化时会创建两个默认账号:

  1. 管理员账号

  2. 测试用户账号

注意:生产环境请务必修改这些默认密码!

数据库说明

项目使用 SQLite 数据库,数据库文件默认为 data.db。数据库初始化脚本位于 scripts/init.sql,包含:

  • users 表:用户信息存储
  • articles 表:文章内容存储
  • 相关索引和初始数据

部署指南

Windows 部署

  1. 编译生成 WebDemo.exe
  2. 将 WebDemo.exe、data.db 和 scripts 文件夹复制到目标服务器
  3. 配置环境变量(可选)
  4. 运行 WebDemo.exe 或配置为 Windows 服务

Linux 部署

  1. 编译生成 WebDemo 可执行文件
    GOOS=linux GOARCH=amd64 go build -o WebDemo
    
  2. 复制文件到目标服务器
  3. 赋予执行权限:chmod +x WebDemo
  4. 运行或配置为系统服务

安全建议

  1. 在生产环境中,务必修改默认的 JWT 密钥
  2. 定期备份数据库文件
  3. 限制 API 访问频率,防止滥用
  4. 考虑使用 HTTPS 协议

许可证

MIT License

开发说明

  • 代码遵循 Go 语言标准规范
  • 使用分层架构Handler -> Service -> Repository -> Database
  • 采用依赖注入模式便于测试和维护