refactor: migrate to Tencent Cloud backend
这个提交包含在:
@@ -0,0 +1,394 @@
|
||||
# 云函数 API 接口清单
|
||||
|
||||
基于 `软件系统说明.docx` 整理。本文档用于把已知云函数职责推进到“接口草案”层,便于后续继续拆成真实路由和字段定义。
|
||||
|
||||
本文档仍然遵循一个原则:不把文档未确认的 URL、字段值、错误码和业务规则写成既定事实。以下内容中的“建议”是为了便于继续设计,不代表已定方案。
|
||||
|
||||
## 已确认云端职责
|
||||
|
||||
文档已确认云函数负责:
|
||||
|
||||
- 用户认证(微信登录)
|
||||
- 设备绑定/解绑
|
||||
- 订阅管理
|
||||
- 护理记录同步
|
||||
- 设备注册(动态获取 `DeviceSecret`)
|
||||
- 试用订阅管理
|
||||
- 数据统计
|
||||
|
||||
## 设计目标
|
||||
|
||||
当前阶段,这份接口文档的目标不是给出最终 API,而是统一以下边界:
|
||||
|
||||
- 哪些接口是一定需要的
|
||||
- 每类接口由谁调用
|
||||
- 每类接口最少要交换哪些信息
|
||||
- 每类接口执行时会影响哪些业务对象
|
||||
|
||||
## 调用方划分
|
||||
|
||||
当前系统至少存在四类调用方:
|
||||
|
||||
- 小程序
|
||||
- 管理后台
|
||||
- 设备或设备接入链路
|
||||
- 云内部任务或异步处理链路
|
||||
|
||||
## 建议接口分组
|
||||
|
||||
### 1. 认证接口
|
||||
|
||||
至少需要:
|
||||
|
||||
- 微信登录
|
||||
- Token 校验或续期
|
||||
- 当前用户信息查询
|
||||
|
||||
### 2. 设备接口
|
||||
|
||||
至少需要:
|
||||
|
||||
- 设备绑定
|
||||
- 设备解绑
|
||||
- 当前绑定设备查询
|
||||
- 设备详情查询
|
||||
|
||||
### 3. 订阅接口
|
||||
|
||||
至少需要:
|
||||
|
||||
- 当前订阅状态查询
|
||||
- 试用订阅发放
|
||||
- 订阅列表查询
|
||||
- 订阅创建或续期
|
||||
|
||||
### 4. 护理记录接口
|
||||
|
||||
至少需要:
|
||||
|
||||
- 护理记录上传
|
||||
- 护理记录列表查询
|
||||
- 单条护理记录详情查询
|
||||
|
||||
### 5. 设备注册与 IoT 接口
|
||||
|
||||
至少需要:
|
||||
|
||||
- 设备注册
|
||||
- `DeviceSecret` 下发
|
||||
- 设备状态同步或查询
|
||||
|
||||
### 6. 统计接口
|
||||
|
||||
至少需要:
|
||||
|
||||
- 用户统计
|
||||
- 设备统计
|
||||
- 治疗统计
|
||||
- 订阅统计
|
||||
|
||||
## 接口命名草案
|
||||
|
||||
下表中的“接口标识”仅用于当前设计阶段统一讨论,不代表最终路由。
|
||||
|
||||
| 分组 | 接口标识 | 主要调用方 | 文档是否确认需要 | 说明 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 认证 | `auth.wx_login` | 小程序 | 是 | 微信登录换取系统身份 |
|
||||
| 认证 | `auth.refresh_token` | 小程序 | 间接确认 | Token 续期 |
|
||||
| 认证 | `auth.get_profile` | 小程序 | 间接确认 | 获取当前用户基础信息 |
|
||||
| 设备 | `device.bind` | 小程序 | 是 | 绑定设备 |
|
||||
| 设备 | `device.unbind` | 小程序 / 后台 | 是 | 解绑设备 |
|
||||
| 设备 | `device.get_current_binding` | 小程序 | 间接确认 | 查询当前绑定设备 |
|
||||
| 设备 | `device.get_detail` | 小程序 / 后台 | 间接确认 | 查询设备详情 |
|
||||
| 订阅 | `subscription.get_current` | 小程序 | 间接确认 | 查询当前订阅状态 |
|
||||
| 订阅 | `subscription.grant_trial` | 云内部任务 / 小程序链路 | 是 | 发放 7 天试用 |
|
||||
| 订阅 | `subscription.list` | 后台 | 间接确认 | 查询订阅列表 |
|
||||
| 订阅 | `subscription.create_or_renew` | 后台 | 是 | 创建或续期订阅 |
|
||||
| 护理记录 | `record.sync` | 小程序 / 设备链路 | 是 | 同步护理记录 |
|
||||
| 护理记录 | `record.list` | 小程序 / 后台 | 间接确认 | 查询护理记录列表 |
|
||||
| 护理记录 | `record.detail` | 小程序 / 后台 | 间接确认 | 查询护理记录详情 |
|
||||
| IoT | `iot.register_device` | 设备链路 / 云内部任务 | 是 | 注册设备 |
|
||||
| IoT | `iot.issue_device_secret` | 设备链路 / 云内部任务 | 是 | 下发 `DeviceSecret` |
|
||||
| IoT | `iot.get_device_status` | 后台 / 云内部任务 | 间接确认 | 查询设备状态 |
|
||||
| 统计 | `stats.user_overview` | 后台 | 是 | 用户统计 |
|
||||
| 统计 | `stats.device_overview` | 后台 | 是 | 设备统计 |
|
||||
| 统计 | `stats.treatment_overview` | 后台 | 是 | 治疗统计 |
|
||||
| 统计 | `stats.subscription_overview` | 后台 | 是 | 订阅统计 |
|
||||
|
||||
## 统一接口契约建议
|
||||
|
||||
后续细化每个接口时,建议统一补齐以下字段:
|
||||
|
||||
- 接口标识
|
||||
- 调用方
|
||||
- 请求方式
|
||||
- 路由
|
||||
- 鉴权要求
|
||||
- 幂等要求
|
||||
- 请求参数
|
||||
- 返回结构
|
||||
- 错误码
|
||||
- 侧效应
|
||||
- 依赖数据表
|
||||
|
||||
## 建议统一响应包络
|
||||
|
||||
当前文档没有确认具体返回格式,但为了后续接口设计一致,建议统一采用一个最小响应包络。
|
||||
|
||||
| 字段 | 是否建议保留 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| `code` | 是 | 业务结果码 |
|
||||
| `message` | 是 | 成功或失败说明 |
|
||||
| `data` | 是 | 业务数据 |
|
||||
| `request_id` | 建议 | 便于日志追踪 |
|
||||
|
||||
## 各接口组的最小信息集合
|
||||
|
||||
### 认证接口
|
||||
|
||||
#### `auth.wx_login`
|
||||
|
||||
最小目标:
|
||||
|
||||
- 接收小程序登录凭证
|
||||
- 识别或创建用户身份
|
||||
- 返回系统可识别的登录态
|
||||
|
||||
至少需要定义:
|
||||
|
||||
- 输入凭证类型
|
||||
- 返回 token 结构
|
||||
- 是否同时返回用户资料和订阅状态
|
||||
|
||||
可能影响的对象:
|
||||
|
||||
- `users`
|
||||
- 登录态或会话存储
|
||||
|
||||
#### `auth.refresh_token`
|
||||
|
||||
最小目标:
|
||||
|
||||
- 延长有效登录态或重新签发 token
|
||||
|
||||
至少需要定义:
|
||||
|
||||
- 续期条件
|
||||
- 旧 token 处理方式
|
||||
- 是否支持滑动过期
|
||||
|
||||
### 设备接口
|
||||
|
||||
#### `device.bind`
|
||||
|
||||
最小目标:
|
||||
|
||||
- 建立用户与设备的绑定关系
|
||||
|
||||
至少需要定义:
|
||||
|
||||
- 设备标识来源
|
||||
- 是否依赖扫码
|
||||
- 是否要求设备在线
|
||||
- 绑定成功后的试用发放关系
|
||||
|
||||
可能影响的对象:
|
||||
|
||||
- `devices`
|
||||
- `bindings`
|
||||
- `subscriptions`
|
||||
- `operation_logs`
|
||||
|
||||
#### `device.unbind`
|
||||
|
||||
最小目标:
|
||||
|
||||
- 解除当前用户与设备的有效绑定关系
|
||||
|
||||
至少需要定义:
|
||||
|
||||
- 谁可发起解绑
|
||||
- 解绑是否影响订阅归属
|
||||
- 历史绑定如何保留
|
||||
|
||||
#### `device.get_current_binding`
|
||||
|
||||
最小目标:
|
||||
|
||||
- 返回当前用户的绑定设备摘要
|
||||
|
||||
至少需要定义:
|
||||
|
||||
- 是否允许无绑定返回空对象
|
||||
- 返回摘要字段范围
|
||||
|
||||
### 订阅接口
|
||||
|
||||
#### `subscription.get_current`
|
||||
|
||||
最小目标:
|
||||
|
||||
- 返回当前用户或当前设备的有效订阅状态
|
||||
|
||||
至少需要定义:
|
||||
|
||||
- 查询口径是按用户还是按设备
|
||||
- 返回是否包含试用信息
|
||||
|
||||
#### `subscription.grant_trial`
|
||||
|
||||
最小目标:
|
||||
|
||||
- 在满足条件时发放 7 天试用
|
||||
|
||||
至少需要定义:
|
||||
|
||||
- 触发时机
|
||||
- 幂等规则
|
||||
- 发放对象
|
||||
|
||||
#### `subscription.create_or_renew`
|
||||
|
||||
最小目标:
|
||||
|
||||
- 后台创建或续期订阅
|
||||
|
||||
至少需要定义:
|
||||
|
||||
- 是否存在订单概念
|
||||
- 生效时间规则
|
||||
- 是否允许覆盖现有有效期
|
||||
|
||||
### 护理记录接口
|
||||
|
||||
#### `record.sync`
|
||||
|
||||
最小目标:
|
||||
|
||||
- 接收一次护理记录并落入后续处理链路
|
||||
|
||||
至少需要定义:
|
||||
|
||||
- 上传主体
|
||||
- 请求是完整记录还是过程数据
|
||||
- 幂等键
|
||||
- 同步成功与异步入库成功的关系
|
||||
|
||||
可能影响的对象:
|
||||
|
||||
- `sessions`
|
||||
- `treatment_records`
|
||||
- `pd_data`
|
||||
- `operation_logs`
|
||||
- `CMQ` 或其他异步链路
|
||||
|
||||
#### `record.list`
|
||||
|
||||
最小目标:
|
||||
|
||||
- 查询治疗记录列表
|
||||
|
||||
至少需要定义:
|
||||
|
||||
- 小程序和后台是否共用同一查询能力
|
||||
- 过滤条件
|
||||
- 排序字段
|
||||
|
||||
### IoT 接口
|
||||
|
||||
#### `iot.register_device`
|
||||
|
||||
最小目标:
|
||||
|
||||
- 为设备建立平台侧可识别身份
|
||||
|
||||
至少需要定义:
|
||||
|
||||
- 调用方
|
||||
- 调用时机
|
||||
- 注册成功后的返回值
|
||||
|
||||
#### `iot.issue_device_secret`
|
||||
|
||||
最小目标:
|
||||
|
||||
- 为设备签发或返回 `DeviceSecret`
|
||||
|
||||
至少需要定义:
|
||||
|
||||
- 签发条件
|
||||
- 是否只可获取一次
|
||||
- 返回方式与安全控制
|
||||
|
||||
### 统计接口
|
||||
|
||||
统计接口当前只确认“后台需要”,最先要补的是统计口径:
|
||||
|
||||
- 时间范围
|
||||
- 去重规则
|
||||
- 试用与正式订阅是否分开统计
|
||||
- 设备在线数是否为实时值
|
||||
|
||||
## 建议接口字段模板
|
||||
|
||||
后续继续细化某个接口时,可直接套用以下模板:
|
||||
|
||||
| 项目 | 内容 |
|
||||
| --- | --- |
|
||||
| 接口标识 | 待定义 |
|
||||
| 调用方 | 待定义 |
|
||||
| 请求方式 | 待定义 |
|
||||
| 路由 | 待定义 |
|
||||
| 鉴权要求 | 待定义 |
|
||||
| 幂等要求 | 待定义 |
|
||||
| 请求参数 | 待定义 |
|
||||
| 返回结构 | 待定义 |
|
||||
| 错误码 | 待定义 |
|
||||
| 侧效应 | 待定义 |
|
||||
| 依赖数据表 | 待定义 |
|
||||
|
||||
## 最先需要定下来的横切规则
|
||||
|
||||
在继续细化具体接口前,建议先统一这几项横切规则:
|
||||
|
||||
- 统一响应包络
|
||||
- 统一错误码风格
|
||||
- 统一分页结构
|
||||
- 统一时间字段格式
|
||||
- 统一幂等键规则
|
||||
- 统一日志追踪字段,如 `request_id`
|
||||
|
||||
## 关键接口待确认问题
|
||||
|
||||
### 微信登录
|
||||
|
||||
- 小程序提交给云端的是 `code` 还是其他凭证
|
||||
- 云端返回自有 token 还是复用微信态
|
||||
- Token 7 天有效期是否支持续期
|
||||
|
||||
### 设备绑定
|
||||
|
||||
- 绑定是否必须基于扫码
|
||||
- 绑定时是否校验设备在线状态
|
||||
- 重复绑定、换绑、解绑是否有限制
|
||||
|
||||
### 试用订阅
|
||||
|
||||
- 发放时机是否严格绑定在首次绑定成功后
|
||||
- 试用对象是用户还是设备
|
||||
- 到期后是否自动降级为不可治疗
|
||||
|
||||
### 护理记录同步
|
||||
|
||||
- 上传主体是小程序还是设备侧
|
||||
- 同步是实时提交还是治疗结束后提交
|
||||
- 异步写入与接口返回成功的关系
|
||||
|
||||
### 设备注册
|
||||
|
||||
- 调用方是生产工具、设备首次上线,还是小程序触发
|
||||
- `DeviceSecret` 是否只签发一次
|
||||
|
||||
## 当前结论
|
||||
|
||||
当前说明已经足够把云函数职责推进到“接口草案”层,但还不能直接生成真实 API。最优先要继续细化的是 `auth.wx_login`、`device.bind`、`subscription.get_current`、`subscription.grant_trial`、`record.sync` 这五个核心接口。
|
||||
在新工单中引用
屏蔽一个用户