api-creationlisted
Install: claude install-skill VitaTsui/agent-monitor
# API 创建规范 (src/services/apis)
本 skill 规范 `src/services/apis/` 下 API 文件的创建方式,确保与项目现有风格一致。
## 先决条件 — 先读这些
每次创建 API 前,必须先确认项目具备以下基础设施(若缺失,则此 skill 不适用):
- `src/services/Axios.ts`:导出 `get`、`post`、`del`、`put`、`streamRequest`,以及 `ResType<T>` 接口。`get`/`post` 返回 `Promise<ResType<T>>`,其中 `T` 是业务 data 的类型。
- `src/services/ResType.ts`:导出 `ListRes<T>`(`{ list, page: { pageNum, pageSize, total } }`)和 `FileRes`(`{ filename, data }`)。
- `src/services/Query.ts`:查询条件构造器,通常以 `new Query().value` 的形式作为 `params.query` 传入列表接口。
导入路径固定使用别名 `@/services/Axios` 和 `@/services/ResType`,**不要**使用相对路径(`../Axios`)——后者仅在 `apis/` 根下的旧文件存在,新文件一律走别名。
## 模块文件的骨架
每个 API 模块(对应一个业务功能,如"API 黑名单管理")是一个独立的 `.ts` 文件,遵循统一骨架:
```ts
/**************************************
* Module Name : <中文模块名>
**************************************/
import { get, post } from "@/services/Axios";
import { ListRes } from "@/services/ResType";
// 表单/页面搜索态类型 —— 供页面组件使用,字段宽松
export interface XxxSearchData extends Record<string, unknown> {
// 具体字段...
}
// 请求参数类型 —— 实际发给后端的 query 参数形状
interface XxxSearch extends Record<string, unknown> {
query: string;
// 其它可选查询字段...
}
// 实体完整形状 —— 定义为 internal interface,再用 Partial 暴露
interface IXxxData {
id: string | number;
// ... 后端返回的所有字段,类型尽量精确
}
export type XxxData = Partial<IXxxData>;
// 列表
export const getXxxList = async (params: XxxSearch) => {
return await get<ListRes<XxxData>>("/<模块前缀>/page", { params });
};
// 详情
export const getXxx = async (id: number | string) => {
r