用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/Rain-kl/OpenFlare --skill new-api命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
Wavelet 项目专用:当业务需要上传文件、读取已上传文件、在 Worker/任务中程序化摄取字节流、选择存储引擎能力、或排查 w_uploads / 文件统计异常时必须使用。本技能指导 storage 与 upload 分层、upload.Ingest 策略选型、前后端接入与禁止旁路写表。
Wavelet 项目专用:新增或修改 Asynq 异步任务、后台任务、定时任务、任务元数据、TaskHandler、TaskParam、PayloadValidator、AppendLog、任务重试、任务执行记录或 Admin 任务 API 时必须使用。
Wavelet 项目专用:当需要开发或接入新的系统通知推送事件、修改消息推送底层设计、调用统一触发器投递消息、或开发带消息推送功能的业务功能时必须使用。本技能指导元数据声明、触发流程、解耦防线和动态同步机制。
正在显示 SKILL.md
| name | new-api |
| description | Wavelet 项目专用:当新增或修改自定义业务 API、新增业务路由、新增 service 层核心逻辑时必须使用。本技能指导包职责划分、推荐文件结构、路由解耦、Swagger 文档生成与质量门禁验证。 |
本技能是 Wavelet 项目接口开发与路由注册的唯一指导规范。在开发任何新接口前,请严格按照本指南进行架构决策与路由注册。
Wavelet 后端路由采用了严格的框架层与业务层隔离机制。请牢记以下开发原则:
internal/router/router.go(核心入口委派)internal/router/root/default.go(公开文件服务、robots.txt、Swagger 及 /api/health 路由)internal/router/root/frontend.go(前端静态服务)internal/router/v1/v1.go(V1 分发层协调器)internal/router/v1/admin.go(框架管理员端管理接口)internal/router/v1/user.go(框架普通用户端基础接口、OAuth及公开接口)custom.go 中注册业务接口:
根据接口的访问路径特征和访问身份/限制条件,决定将新开发的 API 挂载至何处:
| 目标 API 路径特征 | 访问身份/条件限制 | 对应的路由注册入口 | 是否允许修改 |
|---|---|---|---|
/my-custom-path (挂载在根路径下的特殊业务接口) | 自定义控制 | root/custom.go 中的 RegisterCustomRootRoutes | 允许修改 (业务自定义入口) |
/api/v1/custom/... (API v1 下的定制业务接口) | 自定义控制 | v1/custom.go 中的 RegisterCustomRoutes | 允许修改 (业务自定义入口) |
/api/v1/admin/... (系统管理员管理端接口) | 需要管理员登录 (admin.LoginAdminRequired()) | v1/admin.go | 禁止修改 (仅限系统框架路由) |
/api/v1/user/... (框架普通用户基础接口) | 需要普通用户登录 (oauth.LoginRequired()) | v1/user.go | 禁止修改 (仅限系统框架路由) |
/api/v1/public/... (Captcha、Config 等系统公开接口) | 所有人 (无条件 / 公开) | v1/user.go | 禁止修改 (仅限系统框架路由) |
GET /f/:id, GET /robots.txt, GET /api/health (系统级默认及公开接口) | 所有人 (无条件 / 公开) | root/default.go | 禁止修改 (仅限系统框架路由) |
root/custom.go/api/v1 前缀)。package root
import (
"OpenFlare/internal/apps/custom"
"github.com/gin-gonic/gin"
)
// RegisterCustomRootRoutes registers custom business routes that belong to the root path.
func RegisterCustomRootRoutes(r *gin.Engine) {
// 挂载到根路径下,如 GET /my-custom-webhook
r.GET("/my-custom-webhook", custom.HandleRootWebhook)
}
(注:该函数已由 root.go 自动加载,你无需修改任何其他核心文件。)v1/custom.go/api/v1/custom/... 前缀,可选择性配置用户/管理员登录中间件)。package v1
import (
"OpenFlare/internal/apps/custom"
"github.com/gin-gonic/gin"
)
// RegisterCustomRoutes registers standard custom API routes under /api/v1.
func RegisterCustomRoutes(apiV1Router *gin.RouterGroup) {
customRouter := apiV1Router.Group("/custom")
{
// 挂载到 /api/v1/custom 下,例如:POST /api/v1/custom/action
customRouter.POST("/action", custom.DoActionHandler)
}
}
(注:该函数已由 v1/v1.go 自动加载,你无需修改任何其他核心文件。)当新增一套定制的业务接口(例如名为 custom 的业务模块)时,建议采用以下标准文件结构:
internal/
├── router/
│ ├── root/
│ │ └── custom.go # [修改] 若为根路径 API,在此处注册,将路由委派给 apps/custom
│ └── v1/
│ └── custom.go # [修改] 若为 v1 API,在此处注册,将路由委派给 apps/custom
└── apps/
└── custom/
├── routers.go # [新建] HTTP Handlers (Gin),负责参数绑定、校验与响应
├── logics.go # [新建] 业务逻辑层:承载模块内闭环的纯 Go 业务逻辑,不依赖 gin.Context
└── errs.go # [新建] 存放模块特有的业务错误常量定义(可选)
如果自定义功能涉及新表或字段,请参考 database-migration 技能,在 internal/infra/persistence/migrator/goose/ 目录下编写迁移文件,在 internal/model/ 中定义 GORM 实体(无 CRUD / 无 DB 访问),并在 internal/repository/ 中实现数据访问(repository 为唯一持久化入口)。
logics.go / service.go)业务逻辑逻辑应当实现于 internal/apps/custom/ 目录下:
logics.go):定义接收 context.Context 且不依赖 *gin.Context 的函数,易于单元测试与 Worker 复用。参考 internal/apps/user/logics.go。service.go):若需注入依赖(如 DB 连接、外部客户端等),可定义 Service 结构体和构造函数。internal/listener 发射域事件,禁止直接 import push 模块;装配在 internal/platform/bootstrap 完成(参见 push-notification skill)。routers.go)在 internal/apps/custom/routers.go 中编写 Handler:
ShouldBindJSON/ShouldBindQuery)。OpenFlare/internal/shared/response 统一返回响应:
response.OK(data) 或 response.OKNil()response.Err(msg)根据 路由归属判定表,在 root/custom.go 或 v1/custom.go 中编写注册代码,将路由路径绑定到步骤 3 中编写的 Handler。
每次新增或修改接口后,必须运行并验证以下各项:
make license(新增 Go 文件时自动添加许可头)make swagger(若有 Swagger 注释修改)make code-check(确保通过 golangci-lint 和前端 TS 检查)go test ./...(确保所有测试 100% 通过)