摘要:针对于具备刹时流量、业务场景比较简单的小程序,开发者借助 FunctionGraph,能够方便快捷的搭建一个强壮的小程序后盾。
本文分享自华为云社区《智慧校园想搞好,FunctionGraph 少不了——从零开发签到小程序 so easy!》,作者:一只程序猿。
背景
华为 romalab 实验室在构建智慧教育领域 app 时,以 FunctionGraph 为试点,尝试基于 FunctionGraph 云函数开发一个签到小程序。针对于具备刹时流量、业务场景比较简单的小程序,开发者借助 FunctionGraph,能够方便快捷的搭建一个强壮的小程序后盾。
免登方案设计与前后端通信逻辑
计划概述
App 在登录当前,才会关上小程序。如果小程序和 app 的用户体系统一,用户就不必再次登录。在首次拜访小程序的时候,调用智慧校园 app 的免登接口,获取用户信息,而后小程序构建本人的登录状态。因为云函数自身属于无状态的服务,须要借助受权服务器(或者签发 jwt)实现本人的接口认证。
小程序在调用后盾业务接口时,携带票据。
交互流程图
(注:智慧校园 app 是基于华为外部的挪动使能平台 OneMobile 构建,此处的 OneMobile 就能够了解为智慧校园 app)
流程形容
流程形容:
- 关上签到小程序,调用 getToken()获取 ssoTikect 票据信息
- 小程序将 ssoTicket 传入到认证函数 A 中,在 A 中去调用智慧校园 app 的开放平台接口,依据 ssoTicket 取得以后的用户信息
- 拿到用户信息当前,依据该用户信息,生成票据 token,返还给小程序
小程序调用业务函数 B,在申请中携带 token
业务函数 B 在拿到申请当前,校验 token、换取用户信息
校验通过,依据获取的用户信息,执行业务性能,返还后果
业务实现
角色权限管理策略
智慧校园 app 自身对小程序有着严格的权限管制体系,能够在用户、组织、岗位等维度,对小程序的可见性进行管制。因为签到打卡这个业务场景比较简单,且人员有着显著的角色特色,老师设置签到规定,学生扫码进行签到。
联合以后的现状,此次签到小程序不再独自构建本人的权限管理体系,而是依靠于智慧校园 app 自身的权限体系。提供两个小程序,一个是老师应用的“老师上课点名”小程序,用于帮助老师生成签到二维码。一个是“签到打卡”小程序,用于学生上课签到。由智慧校园 app 在入口处对小程序的使用者进行管控。
App 扫码签到实现
如何签到
签到是通过扫描二维码进行签到,在扫码的时候,将扫码失去的信息,传递到后盾,后盾对二维码中的课程信息与签到规定进行比对后,返还签到后果。小程序依据不同的签到后果,给用户展现不同的页面。
如何扫码
以后扫码的入口有两个,一个在小程序外部,一个在 app 的右上角。二者调用的都是零碎的扫码能力。
因为在 app 上扫码可能进入签到小程序并进行签到,就须要签到二维码不仅仅要携带课程信息,同时也要携带要关上小程序的信息。
如何实现扫码进入小程序
智慧校园 app 的扫一扫能力,预制了一些通用的能力,当扫码失去的后果是某一个固定类型的数据格式,就会主动实现一些操作。
如扫码能辨认关上小程序的数据格式为:native://openapp?data={“appid”:”88157779″},而关上小程序的能力,其实是封装了 jssdk 的 xm.openApp()的能力。xm.openApp()容许开发者能在一个小程序外面关上另外一个小程序。
App 扫码签到代码实现流程图
FunctionGraph 实现签到业务
开发函数反对多种语言类型,如 nodejs、python、java 等。后端逻辑中,除了一般业务逻辑(如跟数据库交互)之外,最次要的是跟智慧校园 app 的交互,如获取用户信息。交互模式是接口调用,能够间接援用封装好的客户端来实现,以 nodejs 开发语言为例,间接引入 npm 包即可。
开发后端函数逻辑
认证函数
App 在登录当前,才会关上小程序。如果小程序和 app 的用户体系统一,用户就不必再次登录。而小程序如何在不登录的状况下想要拿到以后应用该 App 的用户,就须要借助 app 的接口,实现免登。认证函数的作用就是获取以后 app 的使用者,并且可能签发小程序本人的自定义登录状态,如签发一个 jwt
认证函数的入参为小程序前台从 app 获取到的 ssoTicket。
具体实现如下:
- 获取智慧校园 app 的 api 调用 SDK 代码,执行 npm pack 打包,生成 OneMobileSDK-0.0.1.tgz, 在新我的项目中装置该依赖 npm install OneMobileSDK-0.0.1.tgz,而后将 node-modules 文件压缩成 zip,上传到 FunctionGraph 的依赖仓库中去。在创立函数时增加该依赖。
a. 创立依赖包
b. 上传依赖文件
c. 增加依赖
- 参照步骤 1,将 mysql-node 的依赖,退出到 FG 的依赖仓库中去,在创立函数时增加该依赖。
3. 调用 OneMobileBaseSDK 外面的 getUserInfoBySsoTicket(ssoTicket),获取用户信息
a. 在代码中援用 SDK
b. 调用接口
- 校验用户信息。
- 依据获取到的用户信息,生成业务接口的调用凭证,返还给小程序前台。
签到函数
对于签到函数,在操作流程下面和认证函数类似,这里不做过多的论述。其主体的流程如下:
- 创立函数时,增加 mysql-node 相干依赖
- 校验签到信息
- 将签到后果入库
- 返还签到后果给小程序
接口凋谢
函数开发实现当前,须要将函数凋谢给小程序应用,具体操作步骤如下。
- 在函数详情页面,点击触发器页签
2. 创立触发器,触发器类型抉择 APIG。因为代码中有认证逻辑,所以网关层不做认证
3. 获取创立的 APIG 调用地址,小程序前端即可依据业务须要,调用相应的 rest 接口。
总结
此次小程序开发辨认到的问题
智慧校园 app
- FullCode 模式下,页面的碎片化问题亟待解决,智慧校园 app 短少页面预览工具以及通用的组件库。
- 免登接口只能在容器中能力调用,而调试的时候局部接口强依赖 ssoTicket,只能通过集成 vconsole,而后在手机中执行 getToken()指令才能够获取 ssoTicket。
- 公司外部没有调试环境,公网调测,每次都须要传包到开放平台,操作起来很麻烦。
- 文档仍需补齐,一些非常规能力,如扫码关上小程序性能,没有相应的文档撑持
- 短少撑持一套前端调测多套环境的解决方案
FunctionGraph
- 代码散布在 3 个中央:前台代码由智慧校园 app 托管运行、网关 api 间接配置在 APIG、函数代码在 Function 里。性能调试胜利后,如果有一键归档(或者下载)性能或者下载工具会比拟好。同样,心愿也有一键部署性能的工具。
- 以后加密配置粒度是单个函数,以连贯数据库为例,多个函数连贯同一个数据库,须要在每个函数中都减少数据库账号密码加密配置,繁琐而且无奈保证数据统一。
能力待晋升
智慧校园 app
- 参照微信,求助 IDE 团队,为提供小程序开发工具
- 参照 welink 为开发者提供开放平台的调测工具,并能一键生成不同语言的接口调用代码
- 构建小程序专门的云开发平台,小程序流量走 App 基座的网关,买通各个云服务,服务之间鉴权由开发平台承接,小程序开发者更专一于业务能力构建。
FunctionGraph
- 可能通过函数利用生命周期治理性能解决函数开发、部署、公布(到 APIG)一体化的问题
- 可能实现用户或租户级别的配置共享
参考文档:
https://support.huaweicloud.c…
https://www.huaweicloud.com/p…
点击关注,第一工夫理解华为云陈腐技术~