后端接口设计 - RESTful API
一、接口规范
1.1 基础信息
- Base URL:
http://localhost:7001/api - 认证方式: JWT Token
- 请求格式: JSON
- 响应格式: JSON
- 字符编码: UTF-8
1.2 统一响应格式
{
"code": 200,
"message": "success",
"data": {},
"token": "新Token(仅在首次访问或Token更新时返回)"
}状态码说明
| Code | 说明 | 场景 |
|---|---|---|
| 200 | 成功 | 请求成功 |
| 400 | 参数错误 | 缺少必填参数、参数格式错误 |
| 401 | 未登录 | Token无效或过期 |
| 403 | 无权限 | 角色权限不足 |
| 404 | 未找到 | 资源不存在 |
| 500 | 服务器错误 | 服务器内部错误 |
1.3 Token传递方式
GET /api/properties
Authorization: Bearer {token}
Content-Type: application/json1.4 分页参数
{
"page": 1,
"pageSize": 10,
"total": 100,
"list": []
}二、委托单模块
2.1 发布委托(房东)
接口地址: POST /api/commissions
权限: 需登录(普通用户即可)
请求参数:
{
"property_type": "residential", // 房源类型: residential/shop/garage/other
"community_id": 1, // 小区ID
"title": "金隅和府 2室1厅 求租",
"type": "rent", // 交易类型: sale/rent
"price": 3500, // 期望价格(可选)
"price_min": 3000, // 最低价格(可选)
"price_max": 4000, // 最高价格(可选)
"area": 67.00, // 面积
"room": 2, // 室
"hall": 1, // 厅
"toilet": 1, // 卫
"floor": 10, // 楼层
"total_floor": 28, // 总楼层
"orientation": "南北", // 朝向
"decoration": "精装修", // 装修情况
"is_short_term": 0, // 是否短租
"rent_unit": "month", // 计价单位(短租时必填)
"min_rent_period": 3, // 最短租期(短租时必填)
"images": ["url1", "url2"], // 图片数组
"description": "房源描述",
"extra_fields": { // 动态字段(根据property_type)
"elevator": true,
"parking": 2
},
"district_ids": [1, 2] // 商圈ID数组
}响应:
{
"code": 200,
"message": "委托发布成功",
"data": {
"commission_id": 1,
"commission_no": "WT202511010001"
}
}2.2 委托大厅列表(经纪人)
接口地址: GET /api/commissions
权限: 需经纪人角色
请求参数:
?page=1
&pageSize=10
&property_type=residential // 筛选房源类型(可选)
&type=rent // 筛选交易类型(可选)
&is_short_term=1 // 筛选短租(可选)
&district_ids=1,2 // 筛选商圈(可选)
&sort=latest // 排序: latest-最新,price_asc-价格升序,price_desc-价格降序响应:
{
"code": 200,
"data": {
"total": 50,
"page": 1,
"pageSize": 10,
"list": [
{
"id": 1,
"commission_no": "WT202511010001",
"property_type": "residential",
"property_type_text": "住宅",
"title": "金隅和府 2室1厅 求租",
"type": "rent",
"type_text": "租房",
"price": 3500,
"price_min": 3000,
"price_max": 4000,
"area": 67.00,
"room": 2,
"hall": 1,
"toilet": 1,
"is_short_term": 0,
"images": ["url1", "url2"],
"community": {
"id": 1,
"name": "金隅和府",
"address": "青岛市北区..."
},
"districts": [
{"id": 1, "name": "新都心"},
{"id": 2, "name": "台东"}
],
"landlord": {
"id": 100,
"nickname": "张三",
"phone": "138****0000" // 脱敏
},
"status": "pending",
"create_time": "2025-11-01 10:00:00"
}
]
}
}2.3 委托详情
接口地址: GET /api/commissions/:id
权限: 需经纪人角色
响应:
{
"code": 200,
"data": {
"id": 1,
"commission_no": "WT202511010001",
"property_type": "residential",
"title": "金隅和府 2室1厅 求租",
"type": "rent",
"price": 3500,
"area": 67.00,
"room": 2,
"hall": 1,
"toilet": 1,
"floor": 10,
"total_floor": 28,
"orientation": "南北",
"decoration": "精装修",
"is_short_term": 0,
"images": ["url1", "url2"],
"description": "房源描述",
"extra_fields": {
"elevator": true,
"parking": 2
},
"community": {...},
"districts": [...],
"landlord": {
"id": 100,
"nickname": "张三",
"phone": "13800138000", // 完整号码(经纪人可见)
"avatar": "url"
},
"status": "pending",
"create_time": "2025-11-01 10:00:00"
}
}2.4 抢单接单
接口地址: POST /api/commissions/:id/accept
权限: 需经纪人角色
请求参数: 无
响应:
{
"code": 200,
"message": "抢单成功",
"data": {
"commission_id": 1,
"accept_time": "2025-11-01 11:00:00"
}
}错误响应:
{
"code": 400,
"message": "该委托已被其他经纪人接单"
}2.5 我的委托列表(房东)
接口地址: GET /api/my/commissions
权限: 需登录
请求参数:
?page=1
&pageSize=10
&status=pending // 筛选状态(可选)响应: 同委托大厅列表
2.6 我接的委托(经纪人)
接口地址: GET /api/my/accepted-commissions
权限: 需经纪人角色
请求参数: 同上
响应: 同委托大厅列表
2.7 基于委托发布房源
接口地址: POST /api/commissions/:id/publish
权限: 需经纪人角色(且已接单)
请求参数:
{
"title": "金隅和府 2室1厅 精装修", // 可修改标题
"price": 3500, // 确认价格
"images": ["url1", "url2", "url3"], // 补充图片
"videos": [ // 添加视频
{
"url": "/uploads/videos/xxx.mp4",
"thumbnail": "/uploads/videos/xxx_thumb.jpg",
"duration": 120,
"size": 10485760
}
],
"description": "房源描述", // 补充描述
"extra_fields": { // 补充动态字段
"elevator": true,
"parking": 2
},
"district_ids": [1, 2], // 确认商圈
"owner_remark": "房东备注信息" // 房东备注(前台不显示)
}响应:
{
"code": 200,
"message": "房源发布成功",
"data": {
"property_id": 100,
"property_no": "FY202511010001"
}
}2.8 取消委托
接口地址: PUT /api/commissions/:id/cancel
权限: 需登录(房东本人)
请求参数:
{
"cancel_reason": "取消原因"
}响应:
{
"code": 200,
"message": "委托已取消"
}三、房源模块(扩展)
3.1 发布房源(经纪人直接发布)
接口地址: POST /api/properties
权限: 需经纪人角色
请求参数:
{
"property_type": "residential", // 房源类型
"community_id": 1,
"title": "金隅和府 2室1厅 精装修",
"type": "rent",
"price": 3500.00,
"area": 67.00,
"room": 2,
"hall": 1,
"toilet": 1,
"floor": 10,
"total_floor": 28,
"orientation": "南北",
"decoration": "精装修",
"is_short_term": 0,
"rent_unit": "month",
"min_rent_period": 3,
"images": ["url1", "url2"],
"videos": [ // 视频数组(最多10个)
{
"url": "/uploads/videos/xxx.mp4",
"thumbnail": "/uploads/videos/xxx_thumb.jpg",
"duration": 120,
"size": 10485760,
"sort": 1
}
],
"description": "房源描述",
"extra_fields": {
"elevator": true,
"parking": 2
},
"district_ids": [1, 2]
}响应:
{
"code": 200,
"message": "发布成功",
"data": {
"property_id": 100,
"property_no": "FY202511010001"
}
}3.2 房源列表(增强)
接口地址: GET /api/properties
权限: 可选认证(OptionalAuth)
请求参数:
?page=1
&pageSize=10
&type=rent // 交易类型
&property_type=residential // 房源类型(新增)
&is_short_term=1 // 短租筛选(新增)
&district_ids=1,2 // 商圈筛选(新增)
&community_id=1 // 小区筛选
&price_min=3000 // 价格区间
&price_max=5000
&area_min=50 // 面积区间
&area_max=100
&room=2 // 户型筛选
&sort=latest // 排序响应:
{
"code": 200,
"data": {
"total": 100,
"page": 1,
"pageSize": 10,
"list": [
{
"id": 100,
"property_no": "FY202511010001",
"property_type": "residential",
"property_type_text": "住宅",
"title": "金隅和府 2室1厅 精装修",
"type": "rent",
"price": 3500.00,
"area": 67.00,
"room": 2,
"hall": 1,
"toilet": 1,
"floor": 10,
"total_floor": 28,
"orientation": "南北",
"decoration": "精装修",
"is_short_term": 0,
"rent_unit": "month",
"thumbnail": "url", // 缩略图
"first_video": { // 第一个视频(新增)
"url": "url",
"thumbnail": "url",
"duration": 120
},
"community": {
"id": 1,
"name": "金隅和府",
"address": "青岛市北区..."
},
"districts": [ // 商圈列表(新增)
{"id": 1, "name": "新都心"},
{"id": 2, "name": "台东"}
],
"agent": {
"id": 2,
"nickname": "张三",
"avatar": "url",
"phone": "138****0000" // 脱敏
},
"views": 100, // 浏览量
"status": 1,
"create_time": "2025-11-01 10:00:00"
}
]
}
}3.3 房源详情(增强)
接口地址: GET /api/properties/:id
权限: 可选认证
响应:
{
"code": 200,
"data": {
"id": 100,
"property_no": "FY202511010001",
"property_type": "residential",
"property_type_text": "住宅",
"title": "金隅和府 2室1厅 精装修",
"type": "rent",
"price": 3500.00,
"area": 67.00,
"room": 2,
"hall": 1,
"toilet": 1,
"floor": 10,
"total_floor": 28,
"orientation": "南北",
"decoration": "精装修",
"is_short_term": 0,
"rent_unit": "month",
"min_rent_period": 3,
"images": ["url1", "url2", "url3"],
"videos": [ // 视频列表(新增)
{
"id": 1,
"url": "/uploads/videos/xxx.mp4",
"thumbnail": "/uploads/videos/xxx_thumb.jpg",
"duration": 120,
"size": 10485760,
"sort": 1
},
{
"id": 2,
"url": "/uploads/videos/yyy.mp4",
"thumbnail": "/uploads/videos/yyy_thumb.jpg",
"duration": 180,
"size": 15728640,
"sort": 2
}
],
"description": "房源描述",
"extra_fields": { // 动态字段(新增)
"elevator": true,
"parking": 2
},
"community": {
"id": 1,
"name": "金隅和府",
"address": "青岛市北区...",
"lat": 36.1081,
"lng": 120.4037,
"build_year": "2015",
"property_fee": "2.5元/㎡/月",
"facilities": { // 周边配套
"subway": [...],
"school": [...],
"shopping": [...]
}
},
"districts": [ // 商圈(新增)
{"id": 1, "name": "新都心"},
{"id": 2, "name": "台东"}
],
"agent": {
"id": 2,
"nickname": "张三",
"avatar": "url",
"phone": "13800138000", // 完整号码
"property_count": 15 // 在售房源数
},
"commission": { // 关联委托信息(如果有)
"commission_no": "WT202511010001",
"landlord_phone": "138****0000" // 经纪人可见房东电话(脱敏)
},
"views": 100,
"status": 1,
"create_time": "2025-11-01 10:00:00"
}
}四、视频管理模块
4.1 上传单个视频
接口地址: POST /api/upload/video
权限: 需经纪人角色
请求格式: multipart/form-data
请求参数:
file: 视频文件响应:
{
"code": 200,
"message": "上传成功",
"data": {
"url": "/uploads/videos/2025/11/xxx.mp4",
"thumbnail": "/uploads/videos/2025/11/xxx_thumb.jpg",
"duration": 120,
"size": 10485760,
"filename": "xxx.mp4"
}
}错误响应:
{
"code": 400,
"message": "视频大小超过50MB限制"
}4.2 批量上传视频
接口地址: POST /api/upload/videos
权限: 需经纪人角色
请求格式: multipart/form-data
请求参数:
files[]: 视频文件数组(最多10个)响应:
{
"code": 200,
"message": "上传成功",
"data": {
"success": [
{
"url": "/uploads/videos/2025/11/xxx.mp4",
"thumbnail": "/uploads/videos/2025/11/xxx_thumb.jpg",
"duration": 120,
"size": 10485760
}
],
"failed": [
{
"filename": "yyy.mp4",
"error": "视频时长超过30分钟限制"
}
]
}
}4.3 删除视频
接口地址: DELETE /api/videos/:id
权限: 需经纪人角色(且为房源发布者)
响应:
{
"code": 200,
"message": "删除成功"
}4.4 调整视频排序
接口地址: PUT /api/properties/:id/videos/sort
权限: 需经纪人角色(且为房源发布者)
请求参数:
{
"video_ids": [2, 1, 3] // 视频ID数组,按新顺序排列
}响应:
{
"code": 200,
"message": "排序成功"
}五、商圈模块
5.1 商圈列表
接口地址: GET /api/districts
权限: 无需认证
请求参数:
?status=1 // 筛选状态(可选)响应:
{
"code": 200,
"data": [
{
"id": 1,
"name": "新都心",
"lat": 36.1081,
"lng": 120.4037,
"address": "青岛市市北区新都心商圈",
"property_count": 150
},
{
"id": 2,
"name": "台东",
"lat": 36.0858,
"lng": 120.3964,
"address": "青岛市市北区台东商圈",
"property_count": 200
}
]
}5.2 搜索商圈
接口地址: GET /api/districts/search
权限: 无需认证
请求参数:
?keyword=新都心响应: 同商圈列表
5.3 按商圈查询房源
接口地址: GET /api/districts/:id/properties
权限: 可选认证
请求参数: 同房源列表
响应: 同房源列表
六、爬虫工具模块
6.1 解析房源URL
接口地址: POST /api/crawler/parse
权限: 需经纪人角色
请求参数:
{
"url": "https://qd.zu.ke.com/zufang/QD2081263756268011520.html"
}响应:
{
"code": 200,
"message": "解析成功",
"data": {
"source": "beike", // 来源: beike/anjuke
"title": "金隅和府 2室1厅 精装修",
"price": 3500,
"area": 67.00,
"room": 2,
"hall": 1,
"toilet": 1,
"floor": 10,
"total_floor": 28,
"orientation": "南北",
"decoration": "精装修",
"images": [ // 已下载到本地的图片URL
"/uploads/images/2025/11/xxx.jpg",
"/uploads/images/2025/11/yyy.jpg"
],
"description": "房源描述",
"community_name": "金隅和府",
"address": "青岛市市北区..."
}
}错误响应:
{
"code": 400,
"message": "解析失败:无法访问该页面,可能已删除或需要登录"
}{
"code": 400,
"message": "不支持的URL,仅支持贝壳和安居客租房链接"
}七、电子合同模块
7.1 创建合同
接口地址: POST /api/contracts
权限: 需经纪人角色
请求参数:
{
"property_id": 100,
"tenant_id": 201, // 租客用户ID
"contract_type": "rent", // rent/sale
"template_id": 1 // 合同模板ID
}响应:
{
"code": 200,
"message": "合同创建成功",
"data": {
"contract_id": 1,
"contract_no": "HT202511010001",
"esign_flow_id": "xxx" // e签宝流程ID
}
}7.2 合同详情
接口地址: GET /api/contracts/:id
权限: 需登录(且为合同相关方)
响应:
{
"code": 200,
"data": {
"id": 1,
"contract_no": "HT202511010001",
"contract_type": "rent",
"property": {
"id": 100,
"title": "金隅和府 2室1厅",
"address": "..."
},
"landlord": {
"id": 100,
"name": "张三",
"phone": "13800138000",
"signed": true,
"sign_time": "2025-11-01 10:00:00"
},
"tenant": {
"id": 201,
"name": "李四",
"phone": "13900139000",
"signed": false,
"sign_time": null
},
"agent": {
"id": 2,
"name": "王五",
"phone": "13700137000",
"signed": false,
"sign_time": null
},
"status": "signing",
"contract_content": "合同内容...",
"contract_url": null, // 已签署合同PDF地址(完成后)
"create_time": "2025-11-01 09:00:00",
"complete_time": null
}
}7.3 获取签署链接
接口地址: GET /api/contracts/:id/sign-url
权限: 需登录(且为合同相关方)
响应:
{
"code": 200,
"data": {
"sign_url": "https://h5sign.esign.cn/sign?token=xxx",
"expire_time": "2025-11-02 10:00:00"
}
}7.4 合同签署回调
接口地址: POST /api/contracts/callback
权限: 无需认证(e签宝回调)
请求参数:
{
"flowId": "xxx",
"signatory": "xxx",
"signResult": "success"
}响应:
{
"code": 200,
"message": "回调处理成功"
}7.5 我的合同列表
接口地址: GET /api/my/contracts
权限: 需登录
请求参数:
?page=1
&pageSize=10
&status=signing // 筛选状态(可选)
&role=tenant // 筛选角色: landlord/tenant/agent(可选)响应:
{
"code": 200,
"data": {
"total": 10,
"list": [
{
"id": 1,
"contract_no": "HT202511010001",
"contract_type": "rent",
"property_title": "金隅和府 2室1厅",
"my_role": "tenant", // 我的角色
"sign_progress": "1/3", // 签署进度
"status": "signing",
"create_time": "2025-11-01 09:00:00"
}
]
}
}7.6 下载已签署合同
接口地址: GET /api/contracts/:id/download
权限: 需登录(且为合同相关方,且合同已完成)
响应: PDF文件流
八、地图服务模块
8.1 POI搜索(小区)
接口地址: GET /api/map/poi
权限: 无需认证
请求参数:
?keyword=金隅和府
®ion=青岛市北区响应:
{
"code": 200,
"data": [
{
"id": "xxx",
"title": "金隅和府",
"address": "青岛市市北区...",
"location": {
"lat": 36.1081,
"lng": 120.4037
},
"category": "房地产:住宅区"
}
]
}8.2 搜索商圈(腾讯地图)
接口地址: GET /api/map/districts
权限: 无需认证
请求参数:
?keyword=商圈
®ion=青岛市北区响应: 同POI搜索
8.3 周边搜索
接口地址: GET /api/map/nearby
权限: 无需认证
请求参数:
?lat=36.1081
&lng=120.4037
&keyword=地铁站
&radius=1000 // 半径(米)响应:
{
"code": 200,
"data": [
{
"title": "3号线五四广场站",
"address": "...",
"distance": 500,
"location": {
"lat": 36.1085,
"lng": 120.4042
}
}
]
}九、管理后台接口
9.1 商圈管理
从腾讯地图同步商圈
接口地址: POST /api/admin/districts/sync-from-map
权限: 需管理员角色
请求参数: 无
响应:
{
"code": 200,
"message": "同步成功",
"data": {
"total": 15, // 搜索到的商圈总数
"imported": 12, // 成功导入数量
"skipped": 3 // 跳过数量(已存在)
}
}手动添加商圈
接口地址: POST /api/admin/districts
权限: 需管理员角色
请求参数:
{
"name": "新都心",
"address": "青岛市市北区新都心商圈",
"lat": 36.1081,
"lng": 120.4037,
"source": "manual"
}响应:
{
"code": 200,
"message": "添加成功",
"data": {
"district_id": 1
}
}9.2 委托管理
委托列表
接口地址: GET /api/admin/commissions
权限: 需管理员角色
请求参数:
?page=1
&pageSize=10
&status=pending
&property_type=residential响应: 同委托大厅列表
9.3 视频管理
视频列表
接口地址: GET /api/admin/videos
权限: 需管理员角色
请求参数:
?page=1
&pageSize=20
&property_id=100 // 筛选房源(可选)响应:
{
"code": 200,
"data": {
"total": 500,
"list": [
{
"id": 1,
"url": "/uploads/videos/2025/11/xxx.mp4",
"thumbnail": "/uploads/videos/2025/11/xxx_thumb.jpg",
"duration": 120,
"size": 10485760,
"property": {
"id": 100,
"title": "金隅和府 2室1厅"
},
"agent": {
"id": 2,
"nickname": "张三"
},
"create_time": "2025-11-01 10:00:00"
}
]
}
}删除视频
接口地址: DELETE /api/admin/videos/:id
权限: 需管理员角色
响应:
{
"code": 200,
"message": "删除成功"
}9.4 合同模板管理
模板列表
接口地址: GET /api/admin/contract-templates
权限: 需管理员角色
响应:
{
"code": 200,
"data": [
{
"id": 1,
"name": "标准租房合同",
"type": "rent",
"esign_template_id": "xxx",
"status": 1,
"is_default": 1,
"create_time": "2025-11-01 10:00:00"
}
]
}创建模板
接口地址: POST /api/admin/contract-templates
权限: 需管理员角色
请求参数:
{
"name": "标准租房合同",
"type": "rent",
"content": "合同内容,支持变量:{{landlord_name}}...",
"esign_template_id": "xxx",
"is_default": 1
}响应:
{
"code": 200,
"message": "创建成功",
"data": {
"template_id": 1
}
}9.5 系统配置管理
获取配置
接口地址: GET /api/admin/configs
权限: 需管理员角色
请求参数:
?keys=video_max_count,video_max_size // 多个key用逗号分隔响应:
{
"code": 200,
"data": {
"video_max_count": "10",
"video_max_size": "52428800",
"video_max_duration": "1800"
}
}更新配置
接口地址: PUT /api/admin/configs
权限: 需管理员角色
请求参数:
{
"video_max_count": "15",
"video_max_size": "104857600"
}响应:
{
"code": 200,
"message": "配置更新成功"
}9.6 爬虫日志
日志列表
接口地址: GET /api/admin/crawler-logs
权限: 需管理员角色
请求参数:
?page=1
&pageSize=20
&status=failed // 筛选状态(可选)
&source_type=beike // 筛选来源(可选)响应:
{
"code": 200,
"data": {
"total": 100,
"list": [
{
"id": 1,
"source_url": "https://qd.zu.ke.com/zufang/xxx.html",
"source_type": "beike",
"status": "success",
"error_msg": null,
"user": {
"id": 2,
"nickname": "张三"
},
"create_time": "2025-11-01 10:00:00"
}
]
}
}文档版本:v1.0
更新日期:2025年11月3日