Skip to content

RESTful API设计规范

文档编号: SYS-INT-STD-001
版本: 1.0
日期: 2026-03-09
作者: 系统架构师
状态: ✅ 已评审


一、概述

1.1 文档目的

本文档定义System平台的RESTful API设计规范,确保所有API接口的一致性、可读性和可维护性。

1.2 适用范围

适用于System平台所有RESTful API的设计和开发。

1.3 参考标准


二、URL设计规范

2.1 基础路径格式

/api/v{版本号}/{资源路径}

示例:

  • /api/v1/users
  • /api/v1/roles
  • /api/v1/departments

2.2 资源命名规范

规范项规则示例
资源名称使用名词复数形式/users, /roles
小写规范全部小写/user-profiles
单词分隔使用连字符 -/user-groups
避免动词不使用动词/getUsers
层级关系使用路径表示/users/1/roles

2.3 URL结构示例

# 基础CRUD
GET    /api/v1/users              # 查询用户列表
POST   /api/v1/users              # 创建用户
GET    /api/v1/users/1            # 查询指定用户
PUT    /api/v1/users/1            # 全量更新用户
PATCH  /api/v1/users/1            # 部分更新用户
DELETE /api/v1/users/1            # 删除用户

# 子资源
GET    /api/v1/users/1/roles      # 查询用户的角色
POST   /api/v1/users/1/roles      # 为用户分配角色
DELETE /api/v1/users/1/roles/2    # 删除用户的指定角色

# 动作接口
POST   /api/v1/users/1/enable     # 启用用户
POST   /api/v1/users/1/disable    # 禁用用户
POST   /api/v1/users/1/reset-password  # 重置密码

三、HTTP方法规范

3.1 方法使用规则

方法用途幂等性安全性
GET查询资源
POST创建资源
PUT全量更新
PATCH部分更新
DELETE删除资源

3.2 方法详细说明

GET - 查询

http
# 查询列表
GET /api/v1/users?page=1&size=10&keyword=admin

# 查询详情
GET /api/v1/users/1

# 查询子资源
GET /api/v1/users/1/roles

POST - 创建

http
# 创建资源
POST /api/v1/users
Content-Type: application/json

{
  "username": "zhangsan",
  "email": "zhangsan@example.com"
}

PUT - 全量更新

http
# 全量更新(未提供字段置空或默认值)
PUT /api/v1/users/1
Content-Type: application/json

{
  "username": "zhangsan",
  "email": "zhangsan@example.com",
  "phone": "13800138000"
}

PATCH - 部分更新

http
# 部分更新(只更新提供的字段)
PATCH /api/v1/users/1
Content-Type: application/json

{
  "phone": "13800138000"
}

DELETE - 删除

http
# 删除资源
DELETE /api/v1/users/1

# 批量删除
DELETE /api/v1/users?ids=1,2,3

四、请求规范

4.1 请求头规范

请求头必填说明示例
Content-Type内容类型application/json
Authorization认证令牌Bearer eyJhbGciOiJIUzI1NiIs...
Accept接受格式application/json
X-Request-ID请求追踪IDreq-123456789
X-Tenant-ID条件租户ID(多租户场景)1001

4.2 请求参数规范

路径参数

用于标识资源唯一性:

http
GET /api/v1/users/{userId}
GET /api/v1/users/{userId}/roles/{roleId}

查询参数

用于过滤、排序、分页:

http
# 分页
GET /api/v1/users?page=1&size=10

# 过滤
GET /api/v1/users?status=active&deptId=1

# 排序
GET /api/v1/users?sort=createTime,desc

# 搜索
GET /api/v1/users?keyword=admin

# 组合
GET /api/v1/users?page=1&size=10&status=active&sort=createTime,desc

查询参数命名规范:

  • 使用驼峰命名法: userId, deptId
  • 分页参数: page, size
  • 排序参数: sort=字段,方向 (asc/desc)
  • 搜索参数: keyword

请求体参数

用于POST/PUT/PATCH请求:

json
{
  "username": "zhangsan",
  "email": "zhangsan@example.com",
  "phone": "13800138000",
  "deptId": 1,
  "roleIds": [1, 2, 3]
}

请求体规范:

  • 使用JSON格式
  • 字段使用驼峰命名法
  • 必填字段必须在文档中标注
  • 枚举值使用字符串或整数

五、响应规范

5.1 响应格式

统一响应结构:

json
{
  "code": 200,
  "message": "success",
  "data": {},
  "timestamp": 1709827200000,
  "requestId": "req-123456789"
}

字段说明:

字段类型必填说明
codeinteger业务状态码
messagestring响应消息
dataany响应数据
timestamplong响应时间戳(毫秒)
requestIdstring请求追踪ID

5.2 成功响应示例

查询列表

json
{
  "code": 200,
  "message": "success",
  "data": {
    "list": [
      {
        "id": 1,
        "username": "zhangsan",
        "email": "zhangsan@example.com"
      },
      {
        "id": 2,
        "username": "lisi",
        "email": "lisi@example.com"
      }
    ],
    "total": 100,
    "page": 1,
    "size": 10
  },
  "timestamp": 1709827200000
}

查询详情

json
{
  "code": 200,
  "message": "success",
  "data": {
    "id": 1,
    "username": "zhangsan",
    "email": "zhangsan@example.com",
    "phone": "13800138000",
    "status": 1,
    "createTime": "2024-01-01T10:00:00Z"
  },
  "timestamp": 1709827200000
}

创建成功

json
{
  "code": 201,
  "message": "创建成功",
  "data": {
    "id": 1,
    "username": "zhangsan",
    "email": "zhangsan@example.com"
  },
  "timestamp": 1709827200000
}

5.3 错误响应示例

json
{
  "code": 400,
  "message": "请求参数错误",
  "data": {
    "errors": [
      {
        "field": "email",
        "message": "邮箱格式不正确"
      },
      {
        "field": "phone",
        "message": "手机号不能为空"
      }
    ]
  },
  "timestamp": 1709827200000
}

六、状态码规范

6.1 HTTP状态码

状态码含义使用场景
200OK请求成功(GET/PUT/PATCH/DELETE)
201Created创建成功(POST)
204No Content删除成功,无返回内容
400Bad Request请求参数错误
401Unauthorized未认证或认证失败
403Forbidden无权限访问
404Not Found资源不存在
409Conflict资源冲突(如重复创建)
422Unprocessable Entity语义错误(如业务规则校验失败)
429Too Many Requests请求过于频繁
500Internal Server Error服务器内部错误

6.2 业务状态码

状态码含义说明
200成功通用成功状态
201创建成功资源创建成功
400参数错误请求参数校验失败
401未认证用户未登录或Token无效
403无权限用户无权限执行此操作
404资源不存在请求的资源不存在
500系统错误服务器内部错误

七、分页规范

7.1 请求参数

参数类型必填默认值说明
pageinteger1当前页码(从1开始)
sizeinteger10每页大小(最大100)

7.2 响应格式

json
{
  "code": 200,
  "message": "success",
  "data": {
    "list": [],
    "total": 100,
    "page": 1,
    "size": 10,
    "pages": 10
  }
}

字段说明:

  • list: 数据列表
  • total: 总记录数
  • page: 当前页码
  • size: 每页大小
  • pages: 总页数

八、排序规范

8.1 请求格式

http
# 单字段排序
GET /api/v1/users?sort=createTime,desc

# 多字段排序
GET /api/v1/users?sort=deptId,asc&sort=createTime,desc

8.2 参数说明

  • 格式: sort=字段名,排序方向
  • 排序方向: asc(升序)或 desc(降序)
  • 多字段排序: 使用多个 sort 参数,按优先级排列

九、批量操作规范

9.1 批量查询

http
GET /api/v1/users?ids=1,2,3

9.2 批量删除

http
DELETE /api/v1/users
Content-Type: application/json

{
  "ids": [1, 2, 3]
}

9.3 批量更新

http
PATCH /api/v1/users/batch
Content-Type: application/json

{
  "ids": [1, 2, 3],
  "status": 0
}

十、文件上传规范

10.1 单文件上传

http
POST /api/v1/files/upload
Content-Type: multipart/form-data

------WebKitFormBoundary
Content-Disposition: form-data; name="file"; filename="avatar.jpg"
Content-Type: image/jpeg

[文件内容]
------WebKitFormBoundary--

10.2 响应格式

json
{
  "code": 200,
  "message": "上传成功",
  "data": {
    "fileId": "f-123456",
    "fileName": "avatar.jpg",
    "fileUrl": "https://cdn.example.com/files/avatar.jpg",
    "fileSize": 102400
  }
}

十一、WebSocket规范(如需要)

11.1 连接地址

wss://api.example.com/ws/v1/notifications

11.2 消息格式

json
{
  "type": "notification",
  "data": {
    "id": "msg-123",
    "title": "系统通知",
    "content": "您有一条新消息"
  },
  "timestamp": 1709827200000
}

十二、API版本控制

12.1 URL路径版本

/api/v1/users
/api/v2/users

12.2 请求头版本(备选)

http
GET /api/users
Accept: application/vnd.example.v1+json

十三、API文档规范

13.1 文档要求

每个API必须包含以下信息:

  • 接口名称
  • 接口描述
  • 请求方法
  • 请求URL
  • 请求头
  • 请求参数(路径参数、查询参数、请求体)
  • 响应格式
  • 错误码
  • 示例

13.2 使用OpenAPI/Swagger

推荐使用OpenAPI 3.0规范编写API文档。


十四、评审记录

14.1 评审意见

序号评审项评审结果评审意见
1URL设计规范✓ 通过规范清晰,符合RESTful标准
2HTTP方法规范✓ 通过方法使用规则明确
3请求响应规范✓ 通过格式统一,易于实现
4状态码规范✓ 通过状态码定义完整
5分页排序规范✓ 通过满足业务需求

14.2 评审结论

评审结论: 通过

评审意见: 本文档定义了完整的RESTful API设计规范,内容全面,结构清晰,符合行业标准。建议作为System平台API设计的标准规范执行。

14.3 签字确认

角色姓名签字日期意见
技术总监张总_______________2026-03-09同意
系统架构师李工_______________2026-03-09同意
后端架构师王工_______________2026-03-09同意
前端负责人陈工_______________2026-03-09同意

十五、修订记录

版本日期作者变更内容
1.02026-03-09系统架构师初始版本,建立RESTful API设计规范

Released under the MIT License.