用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/zhaoxuya520/AI-Fullstack-Delivery-Workflow --skill api-frontend-integration命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
基于 SOC 职业分类
| name | api-frontend-integration |
| description | 前后端联调时使用。适用于 Mock → 真实切换、字段对齐、错误处理对接、Token 传递验证。融合 MSW Mock + 类型共享 + 联调清单。 |
1. 类型共享(TypeScript 端到端)
tRPC / OpenAPI 生成 / 共享 types 包
2. Mock 先行
前端用 MSW Mock 开发
后端就绪后切换
3. 错误码映射表
后端 error.code → 前端 toast / 字段错误
4. 边写边调
不要等全部写完再联调
5. 联调清单
每个端点逐条验证
// server/router.ts
export const appRouter = router({
orders: {
list: publicProcedure
.input(z.object({ page: z.number(), status: z.string().optional() }))
.query(async ({ input }) => {
return await db.order.findMany({ where: { status: input.status } });
}),
create: publicProcedure
.input(createOrderSchema)
.mutation(async ({ input }) => {
return await db.order.create({ data: input });
}),
},
});
export type AppRouter = typeof appRouter;
// client(自动类型推导)
const { data } = trpc.orders.list.useQuery({ page: 1 });
// data 类型自动推导,无需手写
# 从 OpenAPI spec 生成 TypeScript 类型
npx openapi-typescript api.yaml -o src/types/api.ts
# 或用 orval 生成 hooks
npx orval --input api.yaml --output src/api/
packages/
├── types/ ← 共享类型
│ └── src/
│ ├── order.ts
│ └── user.ts
├── api/ ← 后端
└── web/ ← 前端
// 1. 开发时用 MSW
// mocks/handlers.ts
export const handlers = [
http.get('/api/orders', () => HttpResponse.json(mockOrders)),
];
// 2. 后端就绪后关闭 MSW
// 环境变量控制
if (import.meta.env.VITE_ENABLE_MOCKS === 'true') {
const { worker } = await import('./mocks/browser');
worker.start();
}
// 3. 切换后逐条验证
□ URL 路径一致
□ HTTP 方法一致
□ 请求字段名一致(snake_case / camelCase)
□ 请求字段类型一致
□ 响应字段名一致
□ 响应字段类型一致
□ 分页参数(page / limit / cursor)
□ 排序参数(sort / order)
□ 筛选参数
□ 错误码 → 前端处理
□ Token 传递(Header / Cookie)
□ CORS 配置
□ Content-Type 正确
□ 文件上传(multipart)
□ 空结果处理
□ 大数据量(分页正确)
// 后端返回
{ "error": { "code": "INSUFFICIENT_STOCK", "message": "库存不足" } }
// 前端映射
const ERROR_MESSAGES: Record<string, string> = {
VALIDATION_ERROR: '请检查输入',
INSUFFICIENT_STOCK: '库存不足,请减少数量',
RESOURCE_NOT_FOUND: '数据不存在',
FORBIDDEN: '无权限',
RATE_LIMITED: '操作过于频繁,请稍后重试',
};
function handleApiError(error: ApiError) {
const message = ERROR_MESSAGES[error.code] ?? '操作失败,请重试';
toast.error(message);
// 字段级错误
if (error.code === 'VALIDATION_ERROR' && error.details) {
error.details.forEach(d => form.setError(d.field, { message: d.message }));
}
}
templates/integration-checklist.md — 联调清单 + 错误映射 + 类型共享方案□ 类型共享(tRPC / OpenAPI / 共享包)
□ Mock 先行(MSW)
□ 每个端点逐条联调
□ 错误码映射完整
□ Token 传递正确
□ CORS 配置正确
□ 分页 / 筛选对接
□ 空结果处理
□ 文件上传(如有)
□ 联调后 Mock 可关闭
上游:
e2e-feature-delivery → 联调是交付的一部分
database-schema-impl → 字段来源
下游:
deploy-preview → 联调通过后部署