前后端高效协作
场景
前后端并行开发时经常出现:接口定义不清晰、联调效率低、前端被后端阻塞。如何提升协作效率?
方案设计
1. API 先行(API First)
2. API 规范与文档
api-contract.ts
// 使用 OpenAPI / Swagger 定义接口规范
// 前端可以通过工具自动生成类型
// npx openapi-typescript https://api.example.com/openapi.json -o src/types/api.d.ts
// 自动生成的类型
interface GetUserResponse {
code: number;
data: {
id: number;
name: string;
email: string;
};
message: string;
}
3. Mock 方案
msw-mock.ts
// 使用 MSW(Mock Service Worker)
import { http, HttpResponse } from 'msw';
import { setupWorker } from 'msw/browser';
const handlers = [
http.get('/api/users/:id', ({ params }) => {
return HttpResponse.json({
code: 0,
data: {
id: Number(params.id),
name: '张三',
email: 'zhangsan@example.com',
},
});
}),
];
// 开发环境启动 Mock
if (import.meta.env.DEV) {
const worker = setupWorker(...handlers);
worker.start();
}
4. 联调最佳实践
| 阶段 | 做法 |
|---|---|
| 接口设计 | 统一数据规范:{ code, data, message } |
| 开发阶段 | 前端用 MSW Mock,不依赖后端 |
| 联调阶段 | 先对齐接口返回,再跑完整流程 |
| 异常处理 | 约定错误码规范(401 鉴权、403 权限、500 服务器错误) |
联调问题排查流程
常见面试问题
Q1: 前端如何不被后端阻塞?
答案:
- API 先行:在开发前先对齐接口文档
- Mock 开发:使用 MSW 或 Mock Server 独立开发
- TypeScript 类型:根据 API 文档提前定义请求/响应类型
- 契约测试:用工具(如 Pact)验证前后端对接口定义的理解是否一致
Q2: 你遇到过哪些前后端协作的问题?怎么解决的?
答案:
常见问题:
- 接口返回格式不一致:部分接口 data 是对象,部分是数组 → 制定统一规范
- 接口字段频繁变更:后端随意改字段名 → 变更需要通知并更新文档
- 联调环境不稳定:后端服务经常挂 → 前端本地用 Mock,减少对联调环境的依赖
- 时区/日期格式不一致:→ 统一用 ISO 8601 格式和 UTC 时间