情侣故事 API
v0.1 JWT 2026-10-02

💕 情侣故事 API 接口文档

基础路径 /api JWT Token application/json 版本 v0.1

本文档描述了情侣故事应用的完整 RESTful API 接口规范,包括认证、情侣档案、文章、相册、愿望和留言等模块。

目录导航

i 通用说明

响应格式

成功响应:

{
  "code": 200,
  "msg": "操作成功",
  "data": {}
}

失败响应:

{
  "code": 400,
  "msg": "错误信息",
  "data": null
}

错误码

200成功
400参数错误
401未授权 / 登录失效
403权限不足
404资源不存在
429请求过于频繁
500服务器内部错误

认证方式

需要登录的接口,必须在请求头中携带 JWT Token:

Authorization: Bearer <token>

分页参数说明

参数类型必填说明
pageint否页码(从 1 开始)。传入时必须 ≥ 1
pageSizeint否每页数量。传入时必须 ≥ 1
coupleIdint64否情侣档案ID(不传或传 0 时查询当前展示情侣)

分页行为:

  • 不传 page 和 pageSize:返回全部数据(无分页)
  • 传入 page 和 pageSize:返回分页数据,响应中 total 为满足条件的总记录数
  • 仅传其中一个:视为不传,返回全部数据

时间格式

字段类型格式示例
日期时间YYYY-MM-DD HH:mm:ss2024-01-01 12:00:00
日期(ISO)YYYY-MM-DDTHH:mm2024-01-01T12:00

1 健康检查

检查服务状态

GET /api/health 公开

请求参数:无

响应示例:

{
  "code": 200,
  "msg": "操作成功",
  "data": {
    "message": "ok"
  }
}

2 认证相关

2.1 用户登录

POST /api/auth/login 公开 10次/分钟

请求体:

{
  "username": "10000001",
  "password": "your_password"
}
参数类型必填说明验证规则
usernamestring是登录账号(系统分配)6-50 字符
passwordstring是密码6-50 字符

响应示例:

{
  "code": 200,
  "msg": "操作成功",
  "data": {
    "token": "eyJhbGciOiJIUzI1NiIs...",
    "account": "10000001",
    "nickname": "张三",
    "role": 2,
    "coupleId": 1
  }
}
字段类型说明
tokenstringJWT Token,后续请求需携带
accountstring登录账号(系统分配,格式:10000000 + id)
nicknamestring显示昵称
roleint角色:1=管理员,2=情侣成员
coupleIdint关联情侣档案ID(0 表示未绑定)

错误响应:

{
  "code": 400,
  "msg": "用户名或密码错误",
  "data": null
}
{
  "code": 400,
  "msg": "已分手或档案不存在,账号不可用",
  "data": null
}

2.2 修改密码

PUT /api/auth/password 需登录

请求头:

Authorization: Bearer <token>

请求体:

{
  "oldPassword": "old_password",
  "newPassword": "new_password"
}
参数类型必填说明验证规则
oldPasswordstring是旧密码6-50 字符
newPasswordstring是新密码6-50 字符

响应示例:

{
  "code": 200,
  "msg": "操作成功",
  "data": null
}

重要说明:修改密码后,当前 Token 会被拉黑,需要重新登录。

错误响应:

{
  "code": 400,
  "msg": "旧密码错误",
  "data": null
}
{
  "code": 400,
  "msg": "用户不存在",
  "data": null
}

3 情侣档案

3.1 获取当前展示情侣

GET /api/couples/current 公开

请求参数:无

响应示例:

{
  "code": 200,
  "msg": "操作成功",
  "data": {
    "id": 1,
    "bgImg": "https://xxx.cos.com/bg.jpg",
    "boyNickname": "张三",
    "boyImg": "https://xxx.cos.com/boy.jpg",
    "girlNickname": "李四",
    "girlImg": "https://xxx.cos.com/girl.jpg",
    "startTime": "2024-01-01T00:00",
    "showStatus": 1
  }
}
字段类型说明
idint情侣档案ID
bgImgstring背景图片URL
boyNicknamestring男方昵称
boyImgstring男方头像URL
girlNicknamestring女方昵称
girlImgstring女方头像URL
startTimestring恋爱开始时间(YYYY-MM-DD HH:mm)
endTimestring分手时间(未分手时省略此字段)
showStatusint展示状态:0=未展示,1=已展示

3.2 获取指定情侣档案

GET /api/couples/:id 公开

路径参数:

参数类型必填说明
idint是情侣档案ID

响应示例:

{
  "code": 200,
  "msg": "操作成功",
  "data": {
    "id": 1,
    "bgImg": "https://xxx.cos.com/bg.jpg",
    "boyNickname": "张三",
    "boyImg": "https://xxx.cos.com/boy.jpg",
    "girlNickname": "李四",
    "girlImg": "https://xxx.cos.com/girl.jpg",
    "startTime": "2024-01-01T00:00",
    "endTime": "2024-12-01T00:00",
    "showStatus": 0
  }
}

3.3 创建情侣档案(管理员)

POST /api/couples 需登录 管理员 multipart 5次/分钟

请求头:

Authorization: Bearer <token>
Content-Type: multipart/form-data

表单参数:

参数类型必填说明验证规则
boyNicknamestring是男方昵称1-50 字符
girlNicknamestring是女方昵称1-50 字符
startTimestring是恋爱开始时间YYYY-MM-DD HH:mm:ss
boyPasswordstring是男方密码6-50 字符
girlPasswordstring是女方密码6-50 字符,需与男方相同
bgImgfile是背景图片≤512KB,JPG/PNG/WEBP
boyImgfile是男方头像≤512KB,JPG/PNG/WEBP
girlImgfile是女方头像≤512KB,JPG/PNG/WEBP

响应示例:

{
  "code": 200,
  "msg": "操作成功",
  "data": null
}

重要说明:

  • 系统会自动分配登录账号:10000000 + id
  • 男方账号 = 10000000 + coupleId * 2 - 1
  • 女方账号 = 10000000 + coupleId * 2
  • 双方密码必须相同
  • 创建成功后,情侣档案默认不展示(show_status = 0),需管理员手动设置展示

错误响应:

{
  "code": 400,
  "msg": "双方密码不能相同",
  "data": null
}
{
  "code": 403,
  "msg": "无管理员权限",
  "data": null
}

3.4 更新情侣档案

PUT /api/couples/:id 需登录 multipart

权限规则:

路径参数:

参数类型必填说明
idint是情侣档案ID

表单参数(全部可选):

参数类型必填说明验证规则
boyNicknamestring否男方昵称1-50 字符
girlNicknamestring否女方昵称1-50 字符
bgImgfile否背景图片≤512KB
boyImgfile否男方头像≤512KB
girlImgfile否女方头像≤512KB

响应示例:

{
  "code": 200,
  "msg": "操作成功",
  "data": null
}

错误响应:

{
  "code": 400,
  "msg": "没有需要更新的字段",
  "data": null
}
{
  "code": 403,
  "msg": "无权限操作该情侣档案",
  "data": null
}
{
  "code": 404,
  "msg": "情侣档案不存在",
  "data": null
}

3.5 展示情侣档案(管理员)

PATCH /api/couples/:id/show 需登录 管理员

路径参数:

参数类型必填说明
idint是情侣档案ID

响应示例:

{
  "code": 200,
  "msg": "操作成功",
  "data": null
}

重要说明:设置指定档案为当前展示档案(show_status = 1),其他所有档案的展示状态会被设为 0。

错误响应:

{
  "code": 404,
  "msg": "情侣档案不存在或已展示",
  "data": null
}

3.6 获取所有情侣档案(管理员)

GET /api/couples/all 需登录 管理员

请求参数:无

响应示例:

{
  "code": 200,
  "msg": "操作成功",
  "data": [
    {
      "id": 1,
      "bgImg": "https://xxx.cos.com/bg.jpg",
      "boyNickname": "张三",
      "boyImg": "https://xxx.cos.com/boy.jpg",
      "girlNickname": "李四",
      "girlImg": "https://xxx.cos.com/girl.jpg",
      "startTime": "2024-01-01T00:00",
      "showStatus": 1
    },
    {
      "id": 2,
      "bgImg": "https://xxx.cos.com/bg2.jpg",
      "boyNickname": "王五",
      "boyImg": "https://xxx.cos.com/boy2.jpg",
      "girlNickname": "赵六",
      "girlImg": "https://xxx.cos.com/girl2.jpg",
      "startTime": "2024-02-01T00:00",
      "endTime": "2024-12-01T00:00",
      "showStatus": 0
    }
  ]
}

3.7 分手/解除绑定

POST /api/couples/:id/breakup 需登录

权限规则:

路径参数:

参数类型必填说明
idint是情侣档案ID

响应示例:

{
  "code": 200,
  "msg": "操作成功",
  "data": null
}

重要说明:

  • 分手后会设置 end_time 并取消展示(show_status = 0)
  • 双方用户账号会被软删除(deleted = 1),但数据保留
  • 分手后用户无法再登录
  • 分手操作不可逆

错误响应:

{
  "code": 403,
  "msg": "无权限操作该情侣档案",
  "data": null
}
{
  "code": 404,
  "msg": "情侣档案不存在或已分手",
  "data": null
}

4 文章管理

4.1 文章列表

GET /api/articles 公开

查询参数:

参数类型必填说明
coupleIdint64否情侣档案ID(不传或传 0 则查询当前展示情侣)
pageint否页码(传入时必须 ≥ 1)
pageSizeint否每页数量(传入时必须 ≥ 1)

响应示例(分页):

{
  "code": 200,
  "msg": "操作成功",
  "data": {
    "list": [
      {
        "id": 1,
        "author": "张三",
        "content": "这是我们在一起的第一天...",
        "createTime": "2024-01-01 12:00:00"
      }
    ],
    "total": 100
  }
}

4.2 创建文章

POST /api/articles 需登录

请求体:

{
  "content": "这是我们在一起的第一天..."
}
参数类型必填说明验证规则
contentstring是文章内容1-10000 字符

响应示例:

{
  "code": 200,
  "msg": "操作成功",
  "data": null
}

作者会自动取当前登录用户的昵称,文章归属于当前登录用户所属的情侣档案。

4.3 更新文章

PUT /api/articles/:id 需登录

路径参数:

参数类型必填说明
idint是文章ID

请求体:

{
  "content": "更新后的文章内容..."
}

响应示例:

{
  "code": 200,
  "msg": "操作成功",
  "data": null
}
只能更新自己情侣档案下的文章,更新会覆盖原有内容。

4.4 删除文章

DELETE /api/articles/:id 需登录

路径参数:

参数类型必填说明
idint是文章ID

响应示例:

{
  "code": 200,
  "msg": "操作成功",
  "data": null
}
软删除(deleted = 1),数据保留;只能删除自己情侣档案下的文章。

5 相册管理

5.1 相册列表

GET /api/albums 公开

查询参数:

参数类型必填说明
coupleIdint64否情侣档案ID(不传或传 0 则查询当前展示情侣)
pageint否页码(传入时必须 ≥ 1)
pageSizeint否每页数量(传入时必须 ≥ 1)

响应示例(分页):

{
  "code": 200,
  "msg": "操作成功",
  "data": {
    "list": [
      {
        "id": 1,
        "title": "第一次旅行",
        "imgUrl": "https://xxx.cos.com/photo1.jpg",
        "content": "我们去了海边...",
        "imgDate": "2024-01-01T00:00",
        "createTime": "2024-01-01 12:00:00"
      }
    ],
    "total": 50
  }
}

5.2 创建相册

POST /api/albums 需登录 multipart

表单参数:

参数类型必填说明验证规则
titlestring是标题1-100 字符
contentstring是内容描述1-2000 字符
imgDatestring是图片日期YYYY-MM-DD HH:mm:ss
imgFilefile是图片文件≤512KB,JPG/PNG/WEBP

响应示例:

{
  "code": 200,
  "msg": "操作成功",
  "data": null
}

5.3 更新相册

PUT /api/albums/:id 需登录 multipart

表单参数:

参数类型必填说明验证规则
titlestring是标题1-100 字符
contentstring是内容描述1-2000 字符
imgDatestring是图片日期YYYY-MM-DD HH:mm:ss
imgFilefile否图片文件(不传则不更新)≤512KB

响应示例:

{
  "code": 200,
  "msg": "操作成功",
  "data": null
}

5.4 删除相册

DELETE /api/albums/:id 需登录

路径参数:

参数类型必填说明
idint是相册ID

响应示例:

{
  "code": 200,
  "msg": "操作成功",
  "data": null
}
软删除(deleted = 1),数据保留;只能删除自己情侣档案下的相册。

6 愿望管理

6.1 愿望列表

GET /api/wishes 公开

查询参数:

参数类型必填说明
coupleIdint64否情侣档案ID
pageint否页码
pageSizeint否每页数量

响应示例(分页):

{
  "code": 200,
  "msg": "操作成功",
  "data": {
    "list": [
      {
        "id": 1,
        "title": "一起去旅行",
        "content": "想去海边",
        "isAchieved": 0,
        "createTime": "2024-01-01 12:00:00",
        "updateTime": "2024-01-01 12:00:00"
      }
    ],
    "total": 20
  }
}

6.2 创建愿望

POST /api/wishes 需登录

请求体:

{
  "title": "一起去旅行",
  "content": "想去海边"
}
参数类型必填说明验证规则
titlestring是标题1-100 字符
contentstring是内容描述1-2000 字符

响应示例:

{
  "code": 200,
  "msg": "操作成功",
  "data": null
}

6.3 标记愿望实现

PATCH /api/wishes/:id 需登录

路径参数:

参数类型必填说明
idint是愿望ID

响应示例:

{
  "code": 200,
  "msg": "操作成功",
  "data": null
}
将愿望标记为已实现(isAchieved = 1),只能标记自己情侣档案下的愿望。

7 留言管理

7.1 留言列表

GET /api/messages 公开

查询参数:

参数类型必填说明
coupleIdint64否情侣档案ID
pageint否页码
pageSizeint否每页数量

响应示例(分页):

{
  "code": 200,
  "msg": "操作成功",
  "data": {
    "list": [
      {
        "id": 1,
        "author": "访客A",
        "content": "祝你们幸福!",
        "createTime": "2024-01-01 12:00:00"
      }
    ],
    "total": 30
  }
}

7.2 创建留言

POST /api/messages 公开 5次/分钟

请求体:

{
  "author": "访客A",
  "content": "祝你们幸福!",
  "coupleId": 1
}
参数类型必填说明验证规则
authorstring是留言者昵称1-50 字符
contentstring是留言内容1-2000 字符
coupleIdint64否情侣档案ID(不传则发给当前展示情侣)-

响应示例:

{
  "code": 200,
  "msg": "操作成功",
  "data": null
}
  • 未登录用户可以给任意情侣留言(通过 coupleId 指定)
  • 已登录用户留言时,author 会强制使用登录昵称(防伪造)
  • 不传 coupleId 时,留言发给当前展示的情侣

错误响应:

{
  "code": 400,
  "msg": "情侣档案不存在",
  "data": null
}

7.3 删除留言

DELETE /api/messages/:id 需登录

路径参数:

参数类型必填说明
idint是留言ID

响应示例:

{
  "code": 200,
  "msg": "操作成功",
  "data": null
}
只能删除自己情侣档案下的留言。

附 附录

A. 角色说明

角色值角色名称权限说明
1管理员可创建情侣档案、展示/分手任意情侣、更新任意情侣档案
2情侣成员只能操作自己情侣的数据

B. 文件上传限制

文件类型大小限制支持格式
背景图片512KBJPG, PNG, WEBP
头像图片512KBJPG, PNG, WEBP
相册图片512KBJPG, PNG, WEBP

C. 限流说明

接口限流值说明
登录10 次/分钟防止暴力破解
创建情侣档案5 次/分钟防止滥用
创建留言5 次/分钟防止刷屏