10 KiB
Postman / Apifox 导入与测试
导入接口
- 打开 Postman,点击左上角 Import。
- 选择 Files,导入
docs/openapi-0.6.12.json。 - 选择以 Postman Collection 方式导入并确认。
- 在 Collection Variables 中将
baseUrl设置为当前部署地址;本地开发使用http://127.0.0.1:8001。
super_like 和新的位置请求已随 API 0.6.6 发布到正式环境,可以使用正式地址测试。
API 0.6.7 的帖子新字段已经完成正式数据库迁移和部署,可以在正式地址测试。
API 0.6.8 的 GET /api/v1/users/{user_id} 会在公开资料中返回 interests 和最近 20 条 posts;邮箱/手机号、喜欢列表和匹配记录不会返回。
API 0.6.8 的 /api/v1/users/me/liked 和 /api/v1/users/me/likes 不再分页,直接返回完整有效名单;旧请求中携带的 limit、offset 会被忽略。Apifox 更新接口定义时应删除这两个参数。API 0.6.8 已发布到正式环境。
本版 GET /api/v1/auth/me 和 GET /api/v1/users/me 还新增 liked_users_count、liked_by_users_count、matches_count 三个总数字段。它们不受响应中三个名单最多 20 条的限制,正式环境已经可用。
API 0.6.12 本次更新(已发布)
正式环境已经执行 sql/migrate_profile_details.sql(user_profiles 增加 8 个可空资料字段)和 sql/migrate_comment_interactions.sql(post_comments 增加 parent_comment_id、新增 comment_likes 表),并完成 0.6.12 部署。两个脚本保留为幂等迁移,供新环境初始化使用。
导入 docs/openapi-0.6.12.json 后,核对以下变化:
PATCH /api/v1/users/me新增occupation、education、height_cm(100-250)、beliefs、smoking、drinking、pets、exercise。GET /api/v1/auth/me和GET /api/v1/users/me的profile会返回这 8 个字段,并新增根据birth_date计算的age。GET /api/v1/users/me/liked和/api/v1/users/me/likes会排除已经匹配成功的用户,liked_users_count/liked_by_users_count同步扣除。- 评论接口新增回复:
POST /api/v1/explore/posts/{post_id}/comments可带parent_comment_id;CommentResponse 新增parent_comment_id、reply_count、like_count、liked_by_me。 - 新增
POST/DELETE /api/v1/explore/comments/{comment_id}/like点赞和取消点赞评论。 - 旧字段保持不变;此前 0.6.10/0.6.11 的编辑、混合媒体和匹配列表改动保持不变。
共享 Google 文档的完整可粘贴内容见 docs/Google文档完整内容-0.6.12.txt;本次没有直接编辑在线文档。
测试注册
打开 POST /api/v1/auth/register,Body 选择 raw 和 JSON:
{
"email_or_phone": "user@example.com",
"password": "password123",
"confirm_password": "password123",
"relationship_goal": "serious_relationship",
"full_name": "Test User",
"city": "Shanghai",
"country": "China"
}
也可以用同一个字段填写手机号:
{
"email_or_phone": "13800138000",
"password": "password123",
"confirm_password": "password123",
"relationship_goal": "new_friends"
}
成功状态码是 201,响应只包含 access_token、refresh_token 和 token_type。两次密码必须一致,confirm_password 不会保存到数据库。relationship_goal 必须从 serious_relationship、casual_dates、new_friends、marriage 中单选一个。MVP 不需要请求或填写验证码。
注册介绍内容为文字简介或介绍视频二选一。选择文字时在注册 JSON 中提交非空 bio,此时调用 GET /api/v1/auth/me 会看到 profile.video_url: null。选择视频时省略 bio,注册成功后用 access token 调用视频上传接口;上传后再次获取个人资料,profile.bio 为 null,生产环境的 profile.video_url 为一小时有效的完整 OSS 签名 URL。profile.profile_image_url 采用相同规则。前端可以直接加载这些 URL,不需要再次携带 Bearer Token;过期后重新请求资料即可。以后提交非空 bio 会删除介绍视频,重新上传视频会清空 bio。
测试登录
打开 POST /api/v1/auth/login:
{
"email_or_phone": "user@example.com",
"password": "password123"
}
成功状态码是 200。
测试需要登录的接口
- 从注册或登录响应中复制
access_token。 - 打开需要登录的请求,在 Authorization 中选择 Bearer Token。
- 把
access_token粘贴到 Token 输入框,然后发送请求。
旧版的 /api/v1/auth/request-code 和 /api/v1/auth/verify 已移除,不要再测试这两个接口。
Apifox 更新及图片/视频上传
Apifox 项目如果注册请求没有必填的 relationship_goal,滑动请求不接受 super_like,位置请求没有 city、county,帖子请求没有 content_format、feeling、location,或者公开用户资料没有 interests、posts,说明接口定义早于 0.6.8 版本。先备份项目中的手工编辑内容,再将 docs/openapi-0.6.12.json 作为 OpenAPI 导入并核对差异;不要仅凭旧接口列表测试。正式 Base URL 使用 https://melove.youthome.com.cn,请求路径已经包含 /api/v1,不要在 Base URL 再重复拼接此前缀。线上 /health 和 /docs 目前不由 nginx 代理,不能用它们判断业务接口是否可用。
导入 docs/openapi-0.6.12.json 后,核对创建帖子请求中的 content_format、feeling、location,以及公开用户资料响应中的 interests、posts 和公开用户帖子响应中的同名字段。
注册返回 201 后,复制响应的 access_token(不是 refresh_token);上传接口在 Auth 中选择 Bearer Token。Body 选择 form-data,字段类型选择 File,并选择真实文件。不要用 JSON、raw、Binary 或文本形式的文件路径发送,也不要手动设置 Content-Type: application/json 或固定 multipart boundary;由 Apifox 自动生成 multipart/form-data; boundary=...。
| 接口 | form-data 文件字段 | 支持类型 | 单文件上限 |
|---|---|---|---|
POST /api/v1/users/me/image |
image |
JPEG、PNG、WebP | 10 MB |
POST /api/v1/users/me/video |
video |
MP4、MOV、WebM | 100 MB |
POST /api/v1/users/me/identity |
document |
JPEG、PNG、PDF | 10 MB |
头像和视频成功时返回 200,响应含 id、media_type、review_status。401 表示缺失/过期的 access token;422 常见于文件字段名不对或没有实际选择文件;415 表示文件 MIME 类型不支持;413 表示文件过大;503 表示后端存储服务故障。若出现 413 且没有后端 JSON 响应,还应检查 nginx 的请求体大小限制。排查时请提供状态码和响应正文,勿发送 token 或个人文件。
同一用户再次上传头像或介绍视频时,后端会自动替换对应的旧记录和旧文件,每种只保留最新一份;前端不需要先删除,也不需要再次提交注册资料。若新文件存储失败,旧头像或旧视频保持不变。身份证/护照上传仍按原逻辑保存,不受此替换规则影响。
测试兴趣
需要登录的情况下,打开 PUT /api/v1/users/me/interests,Body 选择 raw 和 JSON:
{
"interests": [
"Photography",
"Dogs",
"Travel",
"我的自定义兴趣"
]
}
兴趣至少提交 2 个,但没有最多 4 个的限制。Other 不需要特殊接口,直接把用户输入的内容作为数组中的一项提交即可。查询使用 GET /api/v1/users/me/interests。
测试推荐和国家搜索
注册多个具有 city、country 和 interests 的用户后,使用:
GET /api/v1/meet?limit=20
GET /api/v1/search?city=Shanghai&country=China&limit=20
响应中的公开用户包含 country 和 compatibility_percentage。有效的 Super Like 用户最优先;其余按同城、同国家、其他国家排序,同一组内匹配度高的用户优先。
测试超级喜欢与取消
使用账号 A 的 Bearer token 发送:
POST /api/v1/meet/swipes
{"target_user_id": 2, "direction": "super_like"}
账号 B 尚未滑过账号 A 时,使用账号 B 的 token 调用 GET /api/v1/meet?limit=20,账号 A 应排在最前面。账号 B 对 A 使用 like 或 super_like 时会形成匹配。取消键用账号 A 的 token 发送 DELETE /api/v1/meet/swipes/{账号B的用户ID},响应中的 previous_direction 为 super_like;随后账号 A 在账号 B 的 Meet 中不再享有优先级,已形成的匹配会解除。pass 和 like 也使用同一个 DELETE 接口撤销。
测试定位更新
使用 Bearer token 发送 PUT /api/v1/users/me/location,Body 选择 raw JSON:
{"latitude": 31.2304, "longitude": 121.4737, "city": "上海市", "county": "黄浦区"}
成功返回 200,响应包含这四个字段和 updated_at。再调用 GET /api/v1/auth/me,确认 profile.city、profile.county 已更新;profile.country 是国家,不会被区县覆盖。缺少城市或区县、提交空白名称或非法坐标返回 422。
测试创建帖子、探索列表和公开用户帖子
用作者的 Bearer token 调用 POST /api/v1/explore/posts,发送 JSON:
{
"content": "Feeling **happy** and *relaxed* today",
"post_type": "text",
"content_format": "markdown",
"feeling": "happy",
"location": {"name": "Blue Bottle Coffee, Soho NYC", "latitude": 40.723, "longitude": -73.998}
}
成功返回 201 和帖子 id。feeling 为可选的 1-50 字符标签,location.name 为选定的地点,坐标可同时省略;文字帖至少要有文字、心情或地点之一。粗体/斜体用 Markdown **bold**、*italic* 表示,设置 content_format: "markdown";旧客户端不提交该字段时仍为 plain。后端返回原始 Markdown,不返回 HTML。音乐字段暂不支持。
图片/视频帖先把 post_type 设为 image 或 video 创建帖子,记下返回的 id,然后调用 POST /api/v1/explore/posts/{post_id}/media。Body 选 form-data,文件字段必须叫 media;一条帖子最多 9 张图片或 1 个视频,不能混用。上传成功后再获取帖子列表。
使用另一个账号的 Bearer token 调用 GET /api/v1/explore/feed?limit=20&offset=0 和 GET /api/v1/users/{作者用户ID}/posts?limit=20&offset=0。两者返回的该帖子都应包含相同的 content_format、feeling、location 和 media[];公开用户资料中的 media[] 是头像/介绍视频,与帖子媒体不同。