端上不留密钥、聚合放云端:拆一个鸿蒙记账本案例的五条边界
案例中心有个「个人记账本:鸿蒙端云一体记账与云端聚合统计」,看完觉得它值得写的不是界面,而是它把端侧和云侧的界线划得很硬。端侧只有三 Tab 和一个 HttpUtil,云侧六个云函数加两个集合,金额校验、分类枚举、日期格式、归属校验、分类占比聚合全在云上。这条界线背后是五个具体决定,照着抄基本不会踩坑。
一、端侧只拿公开的项目 ID,密钥一个都不放
案例写得很直白:端侧只带公开的项目 ID 调 executions 接口,不带任何密钥。这是端云一体化里最容易破的一条线——不少示例图省事,把 API Key 塞进端侧配置里,包一拆就泄。这条线一旦破了,后面所有「归属校验」都是摆设,因为谁拿到 Key 都能直连数据库。
二、业务校验放云函数,不放端
六个函数按动作拆:register、login、add-transaction、list-transactions、delete-transaction、get-stats。金额范围、七类分类枚举、日期格式这些校验全在函数里做。好处是端侧改版、换壳、被反编译都不影响校验口径;代价是每次记账都要多一次网络往返。案例选择了后者,因为记账这个场景里数据正确性比响应速度重要,而且金额错了用户会直接不信任这个 App。
三、聚合放云端,端侧只画图
get-stats 负责把某个用户某个月的数据按分类聚合出占比,端侧拿到的就是画环形图要用的数值,Canvas 只负责渲染。这个切法有个隐含好处:统计口径以后要改(比如把「其他」再拆开),只改云函数,不用发版。反过来,如果端侧自己拉明细再算,历史版本的用户会一直看到旧口径。
四、幂等初始化和脚本,比教程正文更值钱
仓库里有三个脚本:init-database.mjs 建集合与索引,deploy-functions.mjs 部署函数,verify-api.mjs 做验收,外面套一个 deploy.sh。案例特别提到「幂等初始化」,也就是重复跑不会翻车——第二次执行不会把已有集合覆盖掉、也不会重复建索引。自己搭环境时最容易漏这一步,第一次成功、第二次重建全乱。
五、验收要有具体条数
案例给的标准是 verify-api.mjs 19 项端到端全绿。这个做法比自己点一遍界面靠谱得多:注册、登录、记账、列表、删除、统计,每条路径都有断言,改完代码跑一遍就知道有没有回归。建议在自己项目里也照这个思路,把「我以为它能跑」换成「脚本说它能跑」。
部署形态与成本提示
云侧在华为云 ECS 上用 docker-compose 自托管 Appwrite 1.9,六个云函数是零依赖 CommonJS,用 Node 内置 http 直调 REST API。零依赖的好处是上传包小、不用在函数里装依赖,node-16 运行时直接跑。要注意这套形态会占一台常开的 ECS,案例本身也把环境准备算进了 3-4 小时里,试之前先想清楚是不是要长期留着这台机器。
端侧三个细节
EntryAbility 先进登录页,登录成功后把 user_id、name、email 写进 Preferences,下次启动直接进主页;主页三 Tab 是记账、明细、统计,记账页顶部还有一张本月支出概览卡;明细页是分页列表带删除。这些看着琐碎,但「登录态落在 Preferences 而不是内存」这条决定了冷启动体验,抄的时候别省。
一句话:这个案例真正的教学点是职责切分——端侧负责交互和呈现,云侧负责校验和聚合,密钥和口径都留在云上。把这条线记住,换成别的业务也一样能用。。
- 点赞
- 收藏
- 关注作者
评论(0)