💕 情侣故事 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>
分页参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
page | int | 否 | 页码(从 1 开始)。传入时必须 ≥ 1 |
pageSize | int | 否 | 每页数量。传入时必须 ≥ 1 |
coupleId | int64 | 否 | 情侣档案ID(不传或传 0 时查询当前展示情侣) |
分页行为:
- 不传 page 和 pageSize:返回全部数据(无分页)
- 传入 page 和 pageSize:返回分页数据,响应中
total为满足条件的总记录数 - 仅传其中一个:视为不传,返回全部数据
时间格式
| 字段类型 | 格式 | 示例 |
|---|---|---|
| 日期时间 | YYYY-MM-DD HH:mm:ss | 2024-01-01 12:00:00 |
| 日期(ISO) | YYYY-MM-DDTHH:mm | 2024-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"
}
| 参数 | 类型 | 必填 | 说明 | 验证规则 |
|---|---|---|---|---|
username | string | 是 | 登录账号(系统分配) | 6-50 字符 |
password | string | 是 | 密码 | 6-50 字符 |
响应示例:
{
"code": 200,
"msg": "操作成功",
"data": {
"token": "eyJhbGciOiJIUzI1NiIs...",
"account": "10000001",
"nickname": "张三",
"role": 2,
"coupleId": 1
}
}
| 字段 | 类型 | 说明 |
|---|---|---|
token | string | JWT Token,后续请求需携带 |
account | string | 登录账号(系统分配,格式:10000000 + id) |
nickname | string | 显示昵称 |
role | int | 角色:1=管理员,2=情侣成员 |
coupleId | int | 关联情侣档案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"
}
| 参数 | 类型 | 必填 | 说明 | 验证规则 |
|---|---|---|---|---|
oldPassword | string | 是 | 旧密码 | 6-50 字符 |
newPassword | string | 是 | 新密码 | 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
}
}
| 字段 | 类型 | 说明 |
|---|---|---|
id | int | 情侣档案ID |
bgImg | string | 背景图片URL |
boyNickname | string | 男方昵称 |
boyImg | string | 男方头像URL |
girlNickname | string | 女方昵称 |
girlImg | string | 女方头像URL |
startTime | string | 恋爱开始时间(YYYY-MM-DD HH:mm) |
endTime | string | 分手时间(未分手时省略此字段) |
showStatus | int | 展示状态:0=未展示,1=已展示 |
3.2 获取指定情侣档案
GET
/api/couples/:id
公开
路径参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
id | int | 是 | 情侣档案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
表单参数:
| 参数 | 类型 | 必填 | 说明 | 验证规则 |
|---|---|---|---|---|
boyNickname | string | 是 | 男方昵称 | 1-50 字符 |
girlNickname | string | 是 | 女方昵称 | 1-50 字符 |
startTime | string | 是 | 恋爱开始时间 | YYYY-MM-DD HH:mm:ss |
boyPassword | string | 是 | 男方密码 | 6-50 字符 |
girlPassword | string | 是 | 女方密码 | 6-50 字符,需与男方相同 |
bgImg | file | 是 | 背景图片 | ≤512KB,JPG/PNG/WEBP |
boyImg | file | 是 | 男方头像 | ≤512KB,JPG/PNG/WEBP |
girlImg | file | 是 | 女方头像 | ≤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
权限规则:
- 情侣成员(role = 2):只能更新自己的情侣档案
- 管理员(role = 1):可以更新任意情侣档案
路径参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
id | int | 是 | 情侣档案ID |
表单参数(全部可选):
| 参数 | 类型 | 必填 | 说明 | 验证规则 |
|---|---|---|---|---|
boyNickname | string | 否 | 男方昵称 | 1-50 字符 |
girlNickname | string | 否 | 女方昵称 | 1-50 字符 |
bgImg | file | 否 | 背景图片 | ≤512KB |
boyImg | file | 否 | 男方头像 | ≤512KB |
girlImg | file | 否 | 女方头像 | ≤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
需登录
管理员
路径参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
id | int | 是 | 情侣档案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
需登录
权限规则:
- 情侣成员(role = 2):只能分手自己的情侣档案
- 管理员(role = 1):可以分手任意情侣档案
路径参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
id | int | 是 | 情侣档案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
公开
查询参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
coupleId | int64 | 否 | 情侣档案ID(不传或传 0 则查询当前展示情侣) |
page | int | 否 | 页码(传入时必须 ≥ 1) |
pageSize | int | 否 | 每页数量(传入时必须 ≥ 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": "这是我们在一起的第一天..."
}
| 参数 | 类型 | 必填 | 说明 | 验证规则 |
|---|---|---|---|---|
content | string | 是 | 文章内容 | 1-10000 字符 |
响应示例:
{
"code": 200,
"msg": "操作成功",
"data": null
}
作者会自动取当前登录用户的昵称,文章归属于当前登录用户所属的情侣档案。
4.3 更新文章
PUT
/api/articles/:id
需登录
路径参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
id | int | 是 | 文章ID |
请求体:
{
"content": "更新后的文章内容..."
}
响应示例:
{
"code": 200,
"msg": "操作成功",
"data": null
}
只能更新自己情侣档案下的文章,更新会覆盖原有内容。
4.4 删除文章
DELETE
/api/articles/:id
需登录
路径参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
id | int | 是 | 文章ID |
响应示例:
{
"code": 200,
"msg": "操作成功",
"data": null
}
软删除(deleted = 1),数据保留;只能删除自己情侣档案下的文章。
5 相册管理
5.1 相册列表
GET
/api/albums
公开
查询参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
coupleId | int64 | 否 | 情侣档案ID(不传或传 0 则查询当前展示情侣) |
page | int | 否 | 页码(传入时必须 ≥ 1) |
pageSize | int | 否 | 每页数量(传入时必须 ≥ 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
表单参数:
| 参数 | 类型 | 必填 | 说明 | 验证规则 |
|---|---|---|---|---|
title | string | 是 | 标题 | 1-100 字符 |
content | string | 是 | 内容描述 | 1-2000 字符 |
imgDate | string | 是 | 图片日期 | YYYY-MM-DD HH:mm:ss |
imgFile | file | 是 | 图片文件 | ≤512KB,JPG/PNG/WEBP |
响应示例:
{
"code": 200,
"msg": "操作成功",
"data": null
}
5.3 更新相册
PUT
/api/albums/:id
需登录
multipart
表单参数:
| 参数 | 类型 | 必填 | 说明 | 验证规则 |
|---|---|---|---|---|
title | string | 是 | 标题 | 1-100 字符 |
content | string | 是 | 内容描述 | 1-2000 字符 |
imgDate | string | 是 | 图片日期 | YYYY-MM-DD HH:mm:ss |
imgFile | file | 否 | 图片文件(不传则不更新) | ≤512KB |
响应示例:
{
"code": 200,
"msg": "操作成功",
"data": null
}
5.4 删除相册
DELETE
/api/albums/:id
需登录
路径参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
id | int | 是 | 相册ID |
响应示例:
{
"code": 200,
"msg": "操作成功",
"data": null
}
软删除(deleted = 1),数据保留;只能删除自己情侣档案下的相册。
6 愿望管理
6.1 愿望列表
GET
/api/wishes
公开
查询参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
coupleId | int64 | 否 | 情侣档案ID |
page | int | 否 | 页码 |
pageSize | int | 否 | 每页数量 |
响应示例(分页):
{
"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": "想去海边"
}
| 参数 | 类型 | 必填 | 说明 | 验证规则 |
|---|---|---|---|---|
title | string | 是 | 标题 | 1-100 字符 |
content | string | 是 | 内容描述 | 1-2000 字符 |
响应示例:
{
"code": 200,
"msg": "操作成功",
"data": null
}
6.3 标记愿望实现
PATCH
/api/wishes/:id
需登录
路径参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
id | int | 是 | 愿望ID |
响应示例:
{
"code": 200,
"msg": "操作成功",
"data": null
}
将愿望标记为已实现(isAchieved = 1),只能标记自己情侣档案下的愿望。
7 留言管理
7.1 留言列表
GET
/api/messages
公开
查询参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
coupleId | int64 | 否 | 情侣档案ID |
page | int | 否 | 页码 |
pageSize | int | 否 | 每页数量 |
响应示例(分页):
{
"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
}
| 参数 | 类型 | 必填 | 说明 | 验证规则 |
|---|---|---|---|---|
author | string | 是 | 留言者昵称 | 1-50 字符 |
content | string | 是 | 留言内容 | 1-2000 字符 |
coupleId | int64 | 否 | 情侣档案ID(不传则发给当前展示情侣) | - |
响应示例:
{
"code": 200,
"msg": "操作成功",
"data": null
}
- 未登录用户可以给任意情侣留言(通过 coupleId 指定)
- 已登录用户留言时,author 会强制使用登录昵称(防伪造)
- 不传 coupleId 时,留言发给当前展示的情侣
错误响应:
{
"code": 400,
"msg": "情侣档案不存在",
"data": null
}
7.3 删除留言
DELETE
/api/messages/:id
需登录
路径参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
id | int | 是 | 留言ID |
响应示例:
{
"code": 200,
"msg": "操作成功",
"data": null
}
只能删除自己情侣档案下的留言。
附 附录
A. 角色说明
| 角色值 | 角色名称 | 权限说明 |
|---|---|---|
| 1 | 管理员 | 可创建情侣档案、展示/分手任意情侣、更新任意情侣档案 |
| 2 | 情侣成员 | 只能操作自己情侣的数据 |
B. 文件上传限制
| 文件类型 | 大小限制 | 支持格式 |
|---|---|---|
| 背景图片 | 512KB | JPG, PNG, WEBP |
| 头像图片 | 512KB | JPG, PNG, WEBP |
| 相册图片 | 512KB | JPG, PNG, WEBP |
C. 限流说明
| 接口 | 限流值 | 说明 |
|---|---|---|
| 登录 | 10 次/分钟 | 防止暴力破解 |
| 创建情侣档案 | 5 次/分钟 | 防止滥用 |
| 创建留言 | 5 次/分钟 | 防止刷屏 |