This commit is contained in:
ivo 2025-08-29 14:50:43 +08:00
commit a3914ab223

221
README.md Normal file
View File

@ -0,0 +1,221 @@
# **前后端接口规范 (RESTful API)**
## **文档修订记录**
| 版本号 | 修订日期 | 修订内容 | 修订人 | 审核人 |
| :--- | :--- | :--- | :--- | :--- |
| V1.0 | 2023-10-27 | 初稿创建,明确驼峰命名法 | [你的名字] | [审核人名字] |
| V1.1 | 2023-11-10 | 增加分页响应体示例 | | |
---
## **1. 核心原则**
1. **RESTful设计**接口设计遵循RESTful架构风格以资源为中心。
2. **HTTPS协议**所有API必须通过**HTTPS**协议提供,保证传输安全。
3. **无状态性**:每次请求都必须包含处理该请求所需的所有信息,服务端不存储用户会话状态。
4. **版本控制**API版本应在URL中清晰体现以便未来平滑升级和兼容。
5. **数据格式**:请求体与响应体统一使用 **`application/json`** 格式。
6. **命名规范****所有请求参数、响应体、请求体中的字段名必须使用驼峰命名法camelCase**。
## **2. 接口设计规范**
### **2.1 URL 设计**
* **格式**`https://api.example.com/{api-version}/{resource}[/{identifier}[/sub-resource]]`
* **版本**URL中必须包含版本号 `v{版本号}`,例如:`/api/v1/users`
* **资源名**:使用**名词复数形式**表示资源集合,如 `/users`, `/products`
* **资源操作**通过HTTP方法表达操作意图而不是在URL中使用动词。
* **正确示例**`DELETE /api/v1/users/123`
* **错误示例**`GET /api/v1/deleteUser?id=123`
* **资源嵌套**:嵌套层级不建议超过两级。
* **示例**`GET /api/v1/users/123/orders` (获取用户ID为123的所有订单)
### **2.2 HTTP 方法使用**
| HTTP 方法 | 语义 | 示例 |
| :--- | :--- | :--- |
| `GET` | **获取**资源(一个或多个) | `GET /api/v1/users` |
| `POST` | **创建**新资源 | `POST /api/v1/users` |
| `PUT` | **全量更新**目标资源(提供资源的完整属性) | `PUT /api/v1/users/123` |
| `PATCH` | **部分更新**目标资源(仅提供需要修改的属性) | `PATCH /api/v1/users/123` |
| `DELETE` | **删除**指定资源 | `DELETE /api/v1/users/123` |
### **2.3 查询参数**
用于`GET`请求的过滤、分页、排序等场景。
* **分页参数**
* `pageNum`: 当前页码从1开始。
* `pageSize`: 每页记录数。
* **排序参数**
* `sortBy`: 排序字段e.g., `createTime`
* `sortOrder`: 排序顺序,`asc``desc`
* **示例**
`GET /api/v1/products?pageNum=1&pageSize=20&sortBy=createTime&sortOrder=desc&category=books`
## **3. 请求与响应规范**
### **3.1 通用响应体结构**
所有HTTP状态码为 `2xx` 的响应必须使用以下统一的JSON结构进行包装。
**字段命名必须遵循驼峰规则。**
```json
{
"code": 200,
"data": ...,
"message": "请求成功",
"timestamp": 1698393599000
}
```
| 字段 | 类型 | 必须 | 说明 |
| :--- | :--- | :--- | :--- |
| `code` | Number | 是 | **业务状态码**可与HTTP状态码一致也可自定义。成功通常为200。 |
| `data` | Object \| Array \| Null | 是 | 响应返回的核心数据。成功时返回对象或数组,失败时可为`null`。 |
| `message` | String | 是 | 对本次请求结果的**人性化描述**,可用于前端直接展示。 |
| `timestamp` | Number | 是 | 服务器响应时的**Unix时间戳**(毫秒级)。 |
### **3.2 成功响应示例**
* **获取单个用户 (GET /api/v1/users/123):**
```json
{
"code": 200,
"data": {
"userId": 123,
"userName": "zhangsan",
"email": "zhangsan@example.com",
"avatarUrl": "https://...",
"createTime": "2023-01-01T10:00:00Z"
},
"message": "success",
"timestamp": 1698393599000
}
```
* **获取用户列表 (GET /api/v1/users):**
```json
{
"code": 200,
"data": [
{
"userId": 123,
"userName": "zhangsan",
"email": "zhangsan@example.com"
},
{
"userId": 124,
"userName": "lisi",
"email": "lisi@example.com"
}
],
"message": "success",
"timestamp": 1698393599000
}
```
* **分页响应体(推荐嵌套在`data`中):**
```json
{
"code": 200,
"data": {
"list": [
{"userId": 123, "userName": "zhangsan"},
{"userId": 124, "userName": "lisi"}
],
"total": 2,
"pageNum": 1,
"pageSize": 10,
"totalPages": 1
},
"message": "success",
"timestamp": 1698393599000
}
```
* **创建用户成功 (POST /api/v1/users):**
```json
{
"code": 201, // 注意这里可以使用201更精确
"data": {
"userId": 125 // 通常返回创建成功后的主键ID或完整对象
},
"message": "用户创建成功",
"timestamp": 1698393599000
}
```
### **3.3 错误响应示例**
HTTP状态码为 `4xx``5xx` 时,同样使用统一结构。
* **用户不存在 (404 Not Found):**
```json
{
"code": 404,
"data": null,
"message": "用户不存在",
"timestamp": 1698393599000
}
```
* **参数校验失败 (400 Bad Request):**
```json
{
"code": 400,
"data": null,
"message": "邮箱格式不正确",
"timestamp": 1698393599000
}
```
* **无权限访问 (403 Forbidden):**
```json
{
"code": 403,
"data": null,
"message": "您没有权限执行此操作",
"timestamp": 1698393599000
}
```
### **3.4 请求体规范**
`POST`, `PUT`, `PATCH` 请求的Body也**必须使用JSON格式和驼峰命名法**。
* **创建用户 (POST /api/v1/users):**
```json
{
"userName": "wangwu",
"email": "wangwu@example.com",
"password": "encryptedPasswordString",
"phoneNumber": "13800138000"
}
```
* **更新用户邮箱 (PATCH /api/v1/users/123):**
```json
{
"email": "new_email@example.com" // 部分更新,只传需要修改的字段
}
```
## **4. 安全与认证**
* **认证**:使用 **JWT (JSON Web Token)** 作为认证机制。
* **传输**JWT应放在HTTP请求头的 `Authorization` 字段中,值为 `Bearer {token}`
```
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
```
* **接口权限**:敏感接口必须在后端校验用户身份和权限。
## **5. 文档与维护**
* **API文档****必须**使用 **Swagger (OpenAPI 3.0)****Apifox**、YApi 等工具在线维护实时API文档。
* **变更沟通**:任何接口的变更(包括字段增删、语义修改)必须**提前通知**所有前端、客户端、测试相关人员,并**同步更新文档**。
* **弃用策略**旧版本API应保留一段时间并在文档中标记为`deprecated`给出替代的新版本API地址。
---