
设计招聘信息平台的API接口遵循RESTful规范,明确企业发布职位(POST /api/jobs)和求职者搜索职位(GET /api/jobs?keyword=...)的参数、返回格式及错误处理,并补充缓存策略(如Redis缓存)、分页实现(游标分页)、HTTP方法特性对比(安全性、幂等性)及高并发冲突检测(如布隆过滤器+JWT),确保接口性能、健壮性与安全性。
老师口吻:咱们先讲RESTful API的核心原则,HTTP方法决定了操作类型:
参数传递与验证:
title、company非空)和数据类型(如salary为字符串,requirements为数组)。keyword):用于GET,用于过滤或分页,可选参数。返回格式:统一用JSON,包含状态码(200、400、401、409、500)和错误/数据信息。状态码含义:
关键优化点:
WHERE id > last_id ORDER BY id LIMIT 10)。| 接口 | HTTP方法 | 参数传递方式 | 安全性(是否改变服务器状态) | 幂等性(多次请求结果是否一致) | 缓存支持 | 典型使用场景 | 注意点 |
|---|---|---|---|---|---|---|---|
| 发布职位 | POST | 请求体(JSON,必填字段:title、company等) | 有(新增职位) | 否(多次POST会重复创建) | 不可缓存 | 企业创建新职位 | 需企业身份认证(JWT),参数完整 |
| 搜索职位 | GET | 查询参数(keyword、page、pageSize等) | 无(读取数据) | 是(多次GET结果一致) | 可缓存 | 求职者查找职位 | 参数可选,支持分页,无副作用 |
| 获取单条职位 | GET | 路径参数(如/api/jobs/{id}) | 无(读取数据) | 是 | 可缓存 | 查看具体职位详情 | 需职位ID,用于详情展示 |
请求体(JSON):
{
"title": "前端开发工程师",
"company": "大连海事大学就业中心",
"location": "大连",
"description": "负责招聘平台前端开发,要求3年以上Vue/React经验",
"requirements": ["熟悉Vue/React", "有项目经验"],
"salary": "面议",
"contact": "hr@dmu.edu.cn"
}
成功响应(JSON):
{
"code": 200,
"message": "职位发布成功",
"data": {
"id": "job_12345",
"title": "前端开发工程师",
"company": "大连海事大学就业中心",
"location": "大连",
"status": "active",
"created_at": "2023-10-27T10:00:00Z"
}
}
冲突响应(409 Conflict):
{
"code": 409,
"message": "职位已存在(标题:前端开发工程师,公司:大连海事大学就业中心,发布时间:2023-10-27)",
"data": null
}
成功响应(JSON):
{
"code": 200,
"message": "搜索成功",
"data": {
"total": 15,
"page": 1,
"pageSize": 10,
"jobs": [
{
"id": "job_12345",
"title": "前端开发工程师",
"company": "大连海事大学就业中心",
"location": "大连",
"salary": "面议",
"created_at": "2023-10-27T10:00:00Z"
},
// 更多职位...
]
}
}
面试官您好,针对招聘信息平台的API设计,我考虑企业发布职位用POST /api/jobs,求职者搜索用GET /api/jobs?keyword=...。首先,POST接口的请求体是JSON,包含职位标题、公司、地点等,必填字段如title、company,验证必填和非空,成功返回新职位ID。GET接口通过keyword过滤,支持分页(page、pageSize),返回匹配列表。错误处理:参数缺失返回400(Bad Request),企业未登录返回401(Unauthorized),重复发布职位返回409(Conflict,通过标题+公司+时间检测)。缓存方面,GET搜索接口用Redis缓存5分钟,更新时清除;分页用游标分页避免大数据量性能问题。HTTP方法对比,POST是写操作,GET是读操作,符合RESTful规范,确保接口健壮。
问:如何具体实现GET搜索接口的缓存策略?
jobs:keyword:{keyword}:page:{page},更新职位时通过Redis事务清除对应缓存。问:搜索接口的分页逻辑具体步骤是怎样的?
WHERE id > last_id ORDER BY id LIMIT 10),避免offset分页的跳表问题。问:如何处理企业重复发布同一职位的高并发冲突?
问:参数验证中非必填字段(如salary)如何处理?
问:接口的权限控制如何保障企业身份安全?
Authorization: Bearer {token},后端验证JWT(签名算法HS256,过期时间1小时),同时记录操作日志,防止未授权访问。LIMIT 0,10),大数据量时跳表导致查询慢,或游标分页实现不当(如游标更新不及时)。