用途:为任意框架提供通用 REST API 设计约定,适合设计、评审端点和接口时使用,优先级 P1(HIGH)。
主要能力:
- HTTP 语义:GET 只读且幂等,绝不改状态;POST 创建或触发,PUT 全量替换,PATCH 局部更新,DELETE 删除。非 CRUD 动作作为子资源,如 POST /orders/:id/cancel。
- 状态码:200 成功;201 创建(加 Location 头);204 无正文;400 校验失败(带 details[]);401 未认证;403 未授权;404 未找到;409 冲突;422 业务规则违规;429 限流(加 Retry-After);500 未处理异常。
- URL 规则:小写 kebab-case,如 /user-profiles;用复数名词 /orders、/products;路径不含动词(动作子资源除外);嵌套最多 2 层。
- 版本管理:默认 URL 路径版本 /v1/users;内部 API 可用请求头 Api-Version: 2;同一控制器不混版本;新版本发布后至少支持上一个主版本 ≥ 6 个月;弃用用 Deprecation: true 与 Sunset: <date> 响应头。
- 分页:大数据或实时数据优先游标分页(cursor + limit),小型静态数据用 offset;默认 limit 20,最大 100,超出拒绝;响应封套 { data: [], pagination: { nextCursor, hasNextPage } }。
- OpenAPI 契约:由代码注解生成而非手写 YAML;每个 API 需 OpenAPI 3.1 规范;包含请求/响应模式、错误结构、认证要求与示例;PR 中评审规范,破坏性变更需升版本。
- 安全基线:默认所有路由需认证,用 @Public() 等显式豁免;校验并净化所有查询参数、路径参数与请求体;显式设置 Content-Type: application/json,拒绝意外类型;返回 X-Content-Type-Options: nosniff 与 X-Frame-Options: DENY。
限制与反模式:GET 不得改状态;不得用 HTTP 200 表示错误;避免深层嵌套 URL;破坏性变更必须走版本管理。具体安装或调用步骤暂未提供。