轻松聘
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

9.9 KiB

职来(有职)前端 × 后端 联调问题清单(致后端同事)

生成时间:2026-09-30 前端仓库:mydreamjob(React Native + Expo,包管理器 yarn) 后端基址:https://job.youthome.com.cn/api/v1 文档口径:以《职来后端接口.md》(248 个端点)为准。scripts/openapi.json 已过期(仅 220 个,缺 /auth/identity/select 等 28 个),后续请以 md 为准。 产生方式:① 覆盖审计(scripts/audit_coverage.py:md 端点 ↔ 前端 request() 双向比对);② 实网探测(scripts/live_probe.py:真实学生账号登录后批量 GET)。


0. 结论速览

指标 数值
后端端点总数 248
前端已接入 80
前端未接入 168
前端「幽灵调用」(调了后端不存在的端点) 0(本次已全部修正)
实网可探测 GET 端点 142(另有 42 个因缺路径 id 未探测)
实网探测 正常 / 异常 50 / 50

需后端配合的事项分三类:① 契约确认(第 1 节)② 端点缺失需补齐(第 2 节)③ 异常端点需关注(第 3 节);测试账号问题见第 4 节;前端已自行修掉的问题见第 5 节。


1. 需要后端确认的接口契约

# 项目 前端现状(已按此实现) 需后端确认
1 分页基准 按 0-based 传 page(Spring Data 默认),列表首页 page=0 全站是否统一 0-based?若个别端点从 1 开始,请指出
2 统一响应包 按 {code,message,data,requestId,timestamp},code=0 成功(HTTP 200),失败读 message 成功码是否恒为 0?requestId 是否用于排障回溯
3 鉴权 Authorization: Bearer <accessToken>;401 时用 refreshToken 静默换新(双 Token) 刷新端点与失效口径;刷新失败是否也返回 401
4 401 / 403 语义 401=未登录或 Token 失效;403=角色无权限 确认区分稳定(实网 403 返回 code=2002)
5 错误码清单 已观测:2002=forbidden、6001=profile not found 请提供完整业务错误码表(前端要按码做差异化提示,不能只靠文案)
6 角色模型 STUDENT / COMPANY / ADMIN;/companies/me/*、/company/*、/admin/* 对 STUDENT 一律 403 企业端角色是否单一 COMPANY?有无子角色
7 岗位状态枚举 前端把后端 status 映射为中文(如「招聘中」) 请给 status 全量取值集合
8 求职偏好字段缺口 后端下发多值数组 + 英文 token(preferredJobTypes[]、employmentTypes:['FULL_TIME']),前端取首项并译中文 后端未下发「期望薪资」「求职状态」,前端只能显示「未设置」。是否补字段?
9 测评(assessment) 按「答卷(attempt)」模型桥接:一次抽 30 题 → 批量保存 → 提交出结果;保存/提交带乐观锁 version,且 typeCode+version 锁定同一套题 并发冲突返回什么码/结构?前端需据此提示「题目已更新,请重试」
10 能力测评(ability) 用 attemptQuestionId + selectedOptionId 提交,无 version 与测评(9)不一致是否有意?能力测评是否也需要乐观锁
11 岗位详情口径 学生端公开详情走 GET /jobs/public/{jobId};GET /jobs/{jobId} 是公司端看自己发布的岗位 确认:/jobs/{jobId} 对 STUDENT 返回 403 是预期(学生不该走这条)

2. 后端未实现 / 缺失的端点(实网 404,需补齐)

以下端点前端已按接口文档实现调用,但实网返回 404 not found,对应页面因此无真实数据源:

端点 实网结果 受影响功能 建议
GET /salary-calculator/calculations、/cities、/cities/{cityCode}、/calculations/{id}、DELETE /calculations/{id} 404 薪资计算器工具页 优先补齐,属求职者高频工具
GET /skills/word-cloud、/skills/match、/skills/learning-path 404 成长域「技能词云 / 岗位匹配 / 学习路径」 补齐或明确砍掉(前端好同步摘页面)
GET /onboarding/company/checklist-items、/onboarding/company/knowledge 404 企业端入职准备 补齐
GET /account/deletion-request 404 账号注销申请查询(POST 同路径待验) 确认注销链路:查询端点是否存在
GET /admin/reviews/replies/pending、GET /company/review-reply/stats 404 评价回复审核 / 统计 确认是否已实现
GET /profile/me/resume 404(code=6001 profile not found) 简历页 学生尚未创建简历时建议返回 200 + 空结构,否则前端把「未填写」当「请求失败」

另:GET /jobs/{jobId}/salary 在接口文档中不存在(salary-calculator 域也 404)。早期前端误调该端点,已在本次修正中移除。若产品需要「按经验段拆分的真实薪资」,请后端设计并给出端点。


3. 实网探测异常汇总(142 个 GET,50 个异常)

3.1 403 forbidden(角色权限,预期,但请复核清单)

/admin/** 全部(scoring / reviews / reports / companies / candidate-scoring)、 /companies/me/** 全部(jobs / talent-invitations / match-rule / onboarding / verification / job-reviews)、 /company/** 全部(applications / candidates / scoring)、 /jobs/{jobId}、/jobs/{jobId}/competition-ranking、/offers/statistics。

学生账号访问自然 403,属预期。唯一需要确认的是 /jobs/{jobId}:学生端应走 /jobs/public/{jobId},请确认这条 403 是设计如此。

3.2 400 missing parameter(前端需带参,请确认参数名与必填性)

端点 缺失参数
GET /jobs/compare ids
GET /offers/compare ids
GET /company/applications jobId
GET /admin/scoring/fairness/overview period
GET /admin/scoring/fairness/dimensions period
GET /admin/scoring/risk/trend bucket
GET /admin/companies/verifications/history verificationId

3.3 404 not found(未实现)

见第 2 节。


4. 测试账号

账号 密码 实网结果
19900009021(学生) ZhilaiTest!2026#A ✅ 可用,登录返回 role=STUDENT, userId=4
19900009801(企业) 文档给的密码 ❌ 登录 401
19900009802(企业) 文档给的密码 ❌ 登录 401

需后端提供一组可用的企业端测试账号(含正确口令),否则企业端 /companies/me/**、/company/** 无法联调(学生 token 一律 403)。同时请提供一组 ADMIN 测试账号用于后台域联调。


5. 前端已自行修复(无需后端改动)

问题 处理
分页基准错误:此前传 page=1,会静默丢掉第 1 页数据 改为 0-based page=0,并封装 toBackendPage/toFrontendPage
岗位 DTO 字段名不一致(title/company.name/薪资单位「元」) 新增映射:title→positionName、company.name→companyName、薪资「元→K」、status→中文
求职偏好结构不一致(后端多值数组+英文 token ↔ 前端单值中文) API 层双向映射(取首项 / token↔label),并新增 EMPLOYMENT_TYPE_LABEL/EMPLOYMENT_TYPE_TOKEN
岗位评分调了不存在的 GET /jobs/{id}/score 改打真实端点 GET /jobs/{id}/personalized-review-score,新增 mapPersonalizedScore(后端 dimensionScores 对象 → 雷达图维度数组)
岗位详情调了不存在的 GET /jobs/{id}/salary,且它在 Promise.all 中 → 404 会让整个详情页加载失败 移除该调用与「真实薪资区间」表;薪资仍由岗位对象的 salaryMin/salaryMax 展示
测评 / 能力测评的单题推进 UI 与后端「答卷模型」不同构 Hook/API 层桥接(抽题→答题→提交→取果),沉淀 mapAttemptToAssessment 等

说明:当前 app.config.js 的 extra.apiUseMock = true,已接通的域走真实后端,未接通的域回落 mock,保证 App 随时可跑、不回归。遇 mock 数据即说明该域尚未接通,不是后端返回了假数据。


6. 覆盖率明细与后续排期

未接入 168 个端点,按域分布:

域 未接入数 性质
admin 34 前端未建后台页(后端应已实现)
profile 32 部分前端未接(候选人评分/数据导出/推荐/隐私/权重等)
companies 20 企业端未接
offers 12 前端未接(Offer 域)
company 11 企业端候选人/评分
onboarding 9 含 2 个后端 404
interviews 9 面试评分域,前端未接
applications 7 投递域,前端未接
jobs 7 含比较/竞争排名等
salary-calculator 6 后端 404
reviews 4 评价回复域
blocks 3 屏蔽域
reports 3 举报域
skills 3 后端 404

前端后续接入优先级:

  • P0:求职者核心闭环 —— applications(投递)、interviews(面试)、offers(Offer)
  • P1:企业端 companies/**、company/**、reviews 回复、blocks、reports
  • P2:admin/**(后台)、profile 剩余(候选人评分、数据导出、推荐)

7. 待后端回复的清单(速览)

  1. 第 1 节 11 项契约逐条确认(尤其:分页基准、错误码表、测评 version 冲突码、岗位 status 枚举、偏好缺「期望薪资/求职状态」)。
  2. 第 2 节 404 端点:是「未实现」还是「路径变更」?给出排期或确认砍掉。
  3. 第 3.2 节 400 端点:确认必填参数名。
  4. 第 4 节:提供可用的企业端与 ADMIN 测试账号。
  5. 第 1.8 / 2 节:是否需要后端补「岗位分经验段薪资」端点(前端已移除误调)。
  6. GET /jobs/{jobId} 对学生的 403 是否为预期(学生端是否只应走 /jobs/public/{jobId})。