Files
quyun-v2/backend/docs/dev/api.md
2025-12-17 16:11:30 +08:00

4.2 KiB
Raw Blame History

Backend 新增 HTTP 接口流程Go + Fiber + atomctl

本文档描述在本仓库 backend/ 中新增一个 HTTP 接口(例如 /super/v1/...的标准流程包含路由生成、Swagger 文档生成、参数绑定与测试验证。

相关目录

  • 路由与 Controllerbackend/app/http/**
    • Super 端示例:backend/app/http/super/*.go
    • 生成路由:backend/app/http/super/routes.gen.go(自动生成,勿手改)
  • Swagger 文档:
    • backend/docs/swagger.yaml
    • backend/docs/swagger.json
    • backend/docs/docs.go(自动生成,勿手改)
  • 本地接口调试示例:backend/super.http
  • 命令:backend/Makefilemake init/make run/make test 等)

增加一个新接口(推荐步骤)

1) 选择模块与 BasePath

  • Super 管理端:一般挂在 /super/v1/...,代码放在 backend/app/http/super/
  • 租户端:项目 main.go 注解里有 @BasePath /t/{tenant_code}/v1,通常租户端接口会以该前缀为基础(具体以现有路由模块为准)。

先决定:

  • METHODGET/POST/PATCH/DELETE…
  • PATH:例如 /super/v1/users/{id}/super/v1/users/:id
  • 鉴权:是否需要 token/权限(跟随模块现有中间件)
  • 请求path/query/body
  • 响应:结构体 / 分页 / KV 列表等

2) 定义请求 DTOFilter/Form与响应 DTO

Super 模块常见模式:

  • 列表分页:dto.*Filter / dto.*PageFilter + 返回 requests.Pager
  • 更新类接口:dto.*UpdateFormbody
  • KV 枚举列表:返回 []requests.KV

可参考:

  • backend/app/http/super/dto/*
  • backend/app/http/super/user.gobackend/app/http/super/tenant.go

3) 编写 Controller 方法(带 Swagger 注解 + Bind

在对应模块的 *.go 中新增方法,保持和现有风格一致:

  • Controller struct 上保留 // @provider
  • 方法上补齐 swagger 注解:@Summary/@Tags/@Param/@Success/@Router
  • 使用 @Bind 约定参数来源path/query/body

示例(参考 backend/app/http/super/user.go

//	@Summary	用户状态列表
//	@Tags		Super
//	@Accept		json
//	@Produce	json
//	@Success	200	{array}	requests.KV
//	@Router		/super/v1/users/statuses [get]
func (*user) statusList(ctx fiber.Ctx) ([]requests.KV, error) { ... }

注意:

  • @Router 的路径写法通常与 Fiber 路由一致(例如 :userID)。
  • 参数绑定会驱动路由代码生成(见下一步)。

4) 连接业务层Service

Controller 内尽量只做:

  • 参数解析/校验
  • 调用 services.* 完成业务
  • 返回结果或 error

业务逻辑集中放在 backend/app/services(结合现有实现),涉及 DB 的部分走现有模型/仓储层(依项目既有组织)。

5) 生成路由代码routes.gen.go

本项目路由是由 atomctl 自动生成的。

常用命令(在 backend/ 下执行):

  • 仅生成路由:atomctl gen route
  • 全量初始化/更新(含 swagger/enum/route/service 等):make init

生成完成后检查:

  • backend/app/http/<module>/routes.gen.go 是否出现新路由
  • 路由 METHOD/PATH、参数绑定是否正确

6) 生成 Swagger 文档swagger.yaml/json/docs.go

Swagger 也是由工具生成并落盘到 backend/docs/

  • atomctl swag init
  • 或直接 make init(会包含该步骤)

生成完成后检查:

  • backend/docs/swagger.yamlbackend/docs/swagger.json 是否包含新接口
  • backend/docs/docs.go 是否同步更新

7) 本地验证

启动:

  • make run(会先 make build

验证方式:

  • 使用 backend/super.http 增加/执行请求
  • 或用 curl/Swagger UI若项目已暴露 swagger 页面)

8) 增加测试(建议)

优先参考现有 e2e 测试:

  • backend/tests/e2e/*

覆盖至少:

  • 正常请求返回
  • 参数缺失/非法
  • 权限不足/未登录(如该接口需要鉴权)

运行:

  • make test

常见注意事项

  • 不要手改 *.gen.gobackend/docs/docs.go:它们由 atomctl 生成。
  • 确认查询参数命名与 swagger 一致(例如 page/limit/asc/desc/status),前端会按 swagger 拼 query。
  • 路由路径参数请在 @Router 与函数签名/@Bind 里保持一致(例如 tenantIDuserID)。