6.9 KiB
6.9 KiB
通用数据路由API使用指南
概述
通用数据路由系统提供了一个统一的API接口,可以根据数据类型和平台自动将数据路由到对应的ClickHouse表中进行存储。这个系统支持所有主要的招聘平台(Boss直聘、前程无忧、智联招聘)和数据类型(职位、公司)。
核心特性
- 统一接口: 所有平台的数据都通过相同的API接口处理
- 自动路由: 根据数据类型和平台自动选择对应的存储表
- 重复检查: 支持自动重复数据检查,避免数据冗余
- 批量处理: 支持单条和批量数据处理
- 异步处理: 支持异步后台任务处理大量数据
- 数据预处理: 自动进行字段映射和数据转换
API端点
基础路径
/api/v1/universal
主要端点
- 存储单条数据:
POST /data/store - 批量存储数据:
POST /data/batch-store - 异步存储单条数据:
POST /data/store-async - 异步批量存储数据:
POST /data/batch-store-async - 获取支持的平台:
GET /platforms
平台特定便捷端点
POST /boss/job- Boss直聘职位数据POST /boss/company- Boss直聘公司数据POST /qcwy/job- 前程无忧职位数据POST /qcwy/company- 前程无忧公司数据POST /zhilian/job- 智联招聘职位数据POST /zhilian/company- 智联招聘公司数据
数据类型和平台
支持的平台
boss- Boss直聘qcwy- 前程无忧zhilian- 智联招聘
支持的数据类型
job- 职位数据company- 公司数据
默认重复检查字段
| 平台 | 职位数据 | 公司数据 |
|---|---|---|
| boss | encrypt_job_id | encrypt_id |
| qcwy | job_id | company_id |
| zhilian | job_id | company_id |
使用示例
1. 存储Boss直聘职位数据
POST /api/v1/universal/data/store
Content-Type: application/json
{
"data": {
"securityId": "abc123",
"jobBaseInfoVO": {
"encryptJobId": "job_encrypt_123",
"jobId": 12345,
"positionName": "Python开发工程师",
"locationName": "北京",
"lowSalary": 15000,
"highSalary": 25000,
"jobDesc": "负责后端开发工作..."
},
"bossBaseInfoVO": {
"encryptBossId": "boss_encrypt_456",
"bossId": 67890,
"bossName": "张经理"
},
"brandComInfoVO": {
"brandName": "某科技公司",
"industryName": "互联网",
"scaleName": "100-499人"
}
},
"data_type": "job",
"platform": "boss",
"check_duplicate": true,
"duplicate_key": "encrypt_job_id"
}
2. 批量存储前程无忧职位数据
POST /api/v1/universal/data/batch-store
Content-Type: application/json
{
"data_list": [
{
"job_name": "Java开发工程师",
"brand_name": "某互联网公司",
"job_addr": "上海",
"salary_desc": "15k-25k",
"job_desc": "负责Java后端开发..."
},
{
"job_name": "前端开发工程师",
"brand_name": "某科技公司",
"job_addr": "深圳",
"salary_desc": "12k-20k",
"job_desc": "负责前端页面开发..."
}
],
"data_type": "job",
"platform": "qcwy",
"check_duplicate": true
}
3. 使用便捷端点存储数据
POST /api/v1/universal/boss/job
Content-Type: application/json
{
"securityId": "abc123",
"jobBaseInfoVO": {
"encryptJobId": "job_encrypt_789",
"positionName": "产品经理",
"locationName": "杭州"
},
"brandComInfoVO": {
"brandName": "某电商公司",
"industryName": "电子商务"
}
}
4. 异步批量处理大量数据
POST /api/v1/universal/data/batch-store-async
Content-Type: application/json
{
"data_list": [
// ... 大量数据
],
"data_type": "job",
"platform": "zhilian",
"check_duplicate": true
}
响应格式
成功响应
{
"code": 200,
"message": "数据存储成功",
"data": {
"success": true,
"message": "数据存储成功",
"duplicate": false,
"result": true
},
"platform": "boss",
"data_type": "job"
}
重复数据响应
{
"code": 400,
"message": "数据已存在",
"data": {
"success": false,
"message": "数据已存在",
"duplicate": true,
"existing_id": 12345
},
"platform": "boss",
"data_type": "job"
}
批量处理响应
{
"code": 200,
"message": "批量处理完成: 成功 8 条,失败 1 条,重复 1 条",
"data": {
"total": 10,
"success": 8,
"failed": 1,
"duplicate": 1,
"errors": [
{
"index": 5,
"error": "缺少必要字段"
}
]
},
"platform": "qcwy",
"data_type": "job"
}
异步处理响应
{
"code": 202,
"message": "数据已加入异步处理队列",
"platform": "zhilian",
"data_type": "job"
}
数据预处理
系统会根据不同平台自动进行数据预处理:
Boss直聘数据预处理
- 从嵌套的VO对象中提取字段
- 映射到标准的数据库字段
- 保留原始数据在
raw_data字段中
前程无忧数据预处理
- 直接映射字段名
- 处理数组类型字段
- 标准化日期格式
智联招聘数据预处理
- 处理复杂的嵌套结构
- 提取关键信息字段
- 转换数据类型
错误处理
常见错误码
400- 请求参数错误或数据已存在500- 服务器内部错误202- 异步处理已接受
错误响应示例
{
"detail": "数据存储失败: 缺少必要字段 'encrypt_job_id'"
}
最佳实践
- 使用重复检查: 始终启用重复检查以避免数据冗余
- 批量处理: 对于大量数据,使用批量接口提高效率
- 异步处理: 对于非实时需求,使用异步接口避免超时
- 错误处理: 妥善处理API返回的错误信息
- 数据验证: 在发送前验证数据的完整性
监控和日志
系统会自动记录以下信息:
- 数据处理成功/失败统计
- 重复数据检测结果
- 处理时间和性能指标
- 错误详情和堆栈信息
可以通过应用日志查看详细的处理信息。
迁移指南
从平台特定API迁移
如果你之前使用平台特定的API(如/api/v1/boss/job),可以:
- 继续使用便捷端点: 使用
/api/v1/universal/boss/job等便捷端点 - 迁移到通用端点: 使用
/api/v1/universal/data/store通用端点 - 逐步迁移: 先测试新接口,确认无误后再完全迁移
数据格式兼容性
新的通用API完全兼容现有的数据格式,无需修改数据结构。