|
|
2 settimane fa | |
|---|---|---|
| .. | ||
| public | 2 settimane fa | |
| scripts | 3 settimane fa | |
| src | 3 settimane fa | |
| .gitignore | 3 settimane fa | |
| README.md | 3 settimane fa | |
| index.html | 3 settimane fa | |
| package-lock.json | 3 settimane fa | |
| package.json | 3 settimane fa | |
| tsconfig.json | 3 settimane fa | |
| tsconfig.node.json | 3 settimane fa | |
| vite.config.ts | 3 settimane fa | |
public/assets/protocol/ 下的 OpenAPI 3.0.3 规格 全部由脚本从 api-v13 的源码生成,
不要手改生成结果。
后端路由或控制器改动之后:
php scripts/generate.php # 或 npm run generate
npm run lint # redocly 校验,应为 0 error
脚本做的事:
php artisan route:list --json(在 ../api-v13 下执行)拿到全部路由。@queryParam / @bodyParam / @urlParam / @deprecated 标签(见下)$request->input()/query()/has()/boolean()/integer() → 查询参数与默认值switch ($request->input('view')) 的 case → 参数枚举validate([...]) / Validator::make() → 请求体字段、必填与类型App\Http\Resources\*Resource::toArray() → 响应 schema。
该方法上写了 @return array{...} 就按声明取类型;没写则退回按字段名猜main.yaml + 每个 path 一个 resources/auto/<slug>.yaml。与其在 overrides/ 里手写 YAML,不如把说明写在控制器的文档注释里——离代码最近,改接口时不容易忘。
语法是固定位置的:@标签 <参数名> <类型> [required] <描述>。
/**
* 列出 channel(译文集)
*
* 按 view 指定的口径返回 channel 列表,支持关键字搜索、分页、排序。
*
* @queryParam view string required 查询口径。Enum: public,studio,system
* @queryParam view2 string 二级口径:my=我的,其余值=协作的。Default: my
* @queryParam updated_at string 只返回该时间之后更新的记录,用于离线包增量同步。
* Example: 2023-09-18T05:39:51.000000Z
* @bodyParam name string required channel 名称,在同一 studio 内唯一
* @urlParam channel string required channel uid
*/
@queryParam 出现在查询串,@bodyParam 出现在请求体,@urlParam 是路径参数。string / integer / number / boolean / array / object。Enum: a,b,c、Default: x、Example: y 会被解析成对应的 schema 字段。@deprecated 会把该 operation 标成废弃。没有声明时,生成器只能按字段名猜类型(_at 结尾→string、is_ 开头→boolean、
_id / status / type 等→integer),会猜错——比如 channels.type 其实是
varchar,却被猜成 integer。
给 Resource 的 toArray() 补一个 @return array{...} 就能让类型变成真声明:
/**
* @return array{
* uid: string,
* type: string,
* summary: string|null,
* studio: array{id: string, nickName: string}|false,
* status: int,
* progress?: float
* }
*/
public function toArray($request)
string|null、|false → 标成 nullable: true,联合类型取第一个具体类型key?: → 该键只在部分口径下返回,会在描述里注明array{...}、array<T>、T[]范例见 api-v13/app/Http/Resources/ChannelResource.php。
| 路径 | 说明 |
|---|---|
public/assets/protocol/main.yaml |
入口,servers / components / paths(全部$ref) |
public/assets/protocol/resources/auto/ |
自动生成,每次重跑会被清空重建,勿手改 |
public/assets/protocol/overrides/ |
手写补充,按同名文件深度合并到自动结果之上 |
public/assets/protocol/resources/list_query.yaml |
列表接口通用分页/排序参数 |
scripts/generate.php |
生成器 |
overrides/ 留给那些不适合写进 PHP 注释的东西(长篇示例响应、跨接口的说明)。
注意合并规则是:同名键以 overrides 为准,数组整体替换——所以在 overrides 里写
parameters 会覆盖掉自动生成的全部参数,一般不要这么做,优先用上面的文档注释标签。
/api 下,业务路由带 /v2、/v3 前缀;/ops 为运维接口,需
Authorization: Bearer <APP_OPS_TOKEN>。{ok, message, data};业务失败时 HTTP 仍可能是 200,以 ok 为准。npm install
npm run dev