← ClaudeAtlas

api-creationlisted

Use this skill when creating, adding, or modifying API modules under `src/services/apis/` in any project that has `src/services/Axios.ts` exporting `get`/`post`/`del`/`put` and `src/services/ResType.ts` exporting `ListRes`. Trigger phrases include "新增一个接口"、"创建 API"、"add a CRUD api"、"在 services/apis 下新增模块"、"新增一个模块的增删改查", or any request to wire up backend endpoints for a list/detail/create/update/delete page. Skip for API usage inside `pages/`/`components/` — this skill is only for authoring files inside `src/services/apis/`. The skill adapts to the current project's own directory structure rather than assuming a fixed set of categories.
VitaTsui/agent-monitor · ★ 0 · API & Backend · score 72
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