实战:Serverless SDK 集成|学习笔记

本文涉及的产品
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
函数计算FC,每月15万CU 3个月
简介: 快速学习实战:Serverless SDK 集成。

开发者学堂课程【玩转EMAS Serverless精品课-疫苗预约小程序实战:Serverless SDK 集成】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/926/detail/14576


实战:Serverless SDK 集成


内容介绍:

一、EMAS Serverless 开发准备

二、 Serverless SDK 介绍

三、实战: Serverless SDK 集成

四、实战:云资源调用

五、课程总结

本节内容:

本节主要分为两个部分,第一部分是偏理论的讲解,第二部分是实战内容。首先要学习作为一个支付宝小程序开发者在支付宝小程序中接入 EMAS Serverless 的开发前的准备,然后再介绍 Serverless SDK 是什么,有什么功能,能做什么。在实战环节会用一个 demo 来串讲 Serverless SDK 的功能,演示其返回值和结构等等,以及会演示上节讲过的云资源的调用和使用。


一、EMAS Serverless 开发准备

1.开通支付宝小程序的账号

(1)访问支付宝开发平台:

https://open.alipay.com/platform/home.htm

(2)支付宝扫码登陆

image.png

(3)在控制台中创建小程序(点击创建应用)

image.png

输入一个符合运营规则的小程序名称,点击创建

image.png

创建完成(此时可以点击复制获得 APPID)

image.png

(有了小程序 id 后,需要在小程序开发时把小程序 id 与支付宝的开发工具关联)

(4)打开小程序开发工具 IDE 创建空白小程序模板

(提前下载好小程序开发工具 IDE )

一个支付宝 id 页面打开图式:

image.png

(5)选择刚刚开通的小程序

可以在左上角选择相应的小程序:

image.png

如果是第一次则需先进行扫码登陆,登录后就可以进行选择小程序

选择完小程序后,完成了小程序 id 与支付宝账号的绑定。

以上是支付宝小程序开发的必经操作

(6)EMAS Serverless开发者接入

image.png

有了 IDE 和支付宝小程序账号后,可以随意的使用 Serverless SDK 去访问 EMAS Serverless 的一些云资源吗?

答案是否定的,出于安全考虑,EMAS Serverless 是有一定的鉴权机制,为了包含一些云函数,云数据库,元存储的资源不被恶意的使用和访问。这个鉴权机制是一个与密钥相关的机制,需要开发者将自身需要的小程序信息以及相关的密钥信息在 EMAS Serverless 的控制台上进行设置。有了该设置后,如果小程序未经授权访问了其服务空间,其 spaceID 下的云资源,该访问会被拒绝,无法通行。

正常的访问是支付宝小程序携带一些鉴权相关的信息,利用 SDK 进行鉴权,鉴权成功后,可以访问名下的云资源

image.png

因此,下面介绍如何填写密钥信息

2.支付宝小程序密钥配置

(1)登录 EMAS Serverless 控制台:

https://mp.console.aliyun.com/cloudDev/setting  

第一次登录需要扫码或输入账号密码

(2)在设置分栏中配置密钥信息

image.png

先在支付宝底下选择添加密钥

image.png

AppID 在第一步可以知道如何获取

加签模式一般选择公钥

应用私钥和支付宝公钥的获取在后续讲解

3.应用私钥获取

(1)下载支付宝开放平台开发助手:

image.png

(2)生成应用密钥

点击生成即可

image.png

(3)复制私钥填入EMAS Serverless 控制台

image.png

(4)记录应用公钥,后续换取支付宝公钥

4.支付宝公钥获取

(1)进入小程序后台

(2)进入开发设置

image.png

有一个接口加签的方式,点击设置(第一次需要发送手机短信获取验证码打开该面板)

(3)填入应用公钥

image.png

(4)保存并换取支付宝公钥


二、 Serverless SDK 介绍

1.Serverless SDK 的好处

简单来说,Serverless SDK 是一个包

可以在小程序中通过依赖管理的方式集成这个包去访问云资源,使用 SDK 的好处有:

首先,SDK 会集成一个鉴权的方式,鉴权是一个比较复杂的步骤,SDK 可以简单得完成该步骤,用户只需调用一个接口即可。并且这是一个静默授权的方式,比如作为开发者,不会因为授权影响客户,例如一些弹窗。

另外,SDK 可以自动保护。例如,授权信息在一段时间内生效,但是又去访问了原函数的接口,这时 SDK 会续存 token 的活性

第三是 SDK 提供了一套友好的接口规范,开发者可以根据该规范很好的设计代码,包括返回值是规范起来的 promise 的一个对象。

总的来说,借助 SDK 小程序,开发者可以高效安全的使用 EMAS Serverless 的云资源。

2. Serverless SDK 的功能

(1)云函数的服务

函数签名:

mpserverless.function.invoke(functionName: string.functonArgs?: object ): Promise<Result>

说明:

mpserverless 是 SDK 的实例对象,一级访问接口是 function或者是 db ,原函数接口只有一个 invoke (调用原函数),接口入参是 functionName 和一个非必要得参数。

人口参数:

字段名

类型

必填

说明

字段名

functionName

string

所调用的云函数名

functionName

functionArgs

object

传入目标云函数的参数

functionArgs

返回参数:

字段名

类型

说明

success

Boolean

执行状态

requestld

string

请求ID

SDK 会在后续更加详细的介绍其使用

(2)云数据库服务

云数据库 SDK 接口清单:

可以通过 SDK 实现

接口名

说明

aggregate

对数据库执行聚合查询

count

获取集合中符合条件的记录数量

deleteOne

删除集合中的一条记录

deleteMany

删除集合中的一批记录

distinct

获取某个属性去重后的所有记录

find

查询集合中的记录

findOne

查询集合中的单条记录

findOneAndDelete

查询并删除一条记录,并将这条数据返回

findOneAndReplace

查询并替换一条记录

findOneAndUpdate

查询并更新一条记录

replaceOne

查询并整体替换这条记录

insertMany

插入一批记录到集合中

insert0ne

插入一条记录到集合中

updateMany

更新集合中的一批记录

updateOne

更新集合中的一条记录

以 find 为例:

接口实例:

mpserverless.db.collestion(collection:string).find(query?:object,options?:object):Promise <MongoResult>

说明:

数据库的接口群与 Mongo比较像,指定 collection 就是指定数据库中的数据表对其操作。

入口参数:

字段名

类型

必填

说明

query

object

数据库操作时的查询条件

options

object

控制项

options.limit

Number

查询的文档数量限制

options.skip

Number

跳过的文档数量

options.sort

object

指定排序的字段,并使用1和-1来指定排序的方式。其中:1表示升序排列、-1表示降序排列

options.projection

object

使用投影操作符指定返回的键,值设置为1的字段返

返回参数

字段名

类型

说明

success

Boolean

操作是否成功

result

Any

返回结果

affectedDocs

Number

操作记录的数量

(3)云存储服务

云存储SDK接口清单

接口名

说明

uploadFile

上传文件到云存储

deleteFile

从云存储删除文件

接口示例:

mpserverless.file.uploadFile(options: object): Promise<Result>

入口参数:

字段名

类型

必填

说明

options

object

本地上传文件信息

返回参数

字段名

类型

说明

filePath

string

本地文件路径

fileUrl

string

云存储文件地址链接

关于云存储会在第五节课介绍其详细的用法,包括和支付宝原生的图片的一个结合。

(4)用户信息服务

在支付宝小程序不是很好拿到支付宝的一个 id ,但是可以通过 Serverless 的一个方式支付宝的 id

接口示例:

mpserverless.user.getInfo(options: object ): Promise<Result>

说明:

以 user 为第一个接口的命名,只提供一个接口 getInfo

入口参数

字段名

类型

必填

说明

options

Object

options.authProvider

alipay_openapi :支付宝〔默认值)

wechat_openapi :微信

dingtalk_openapi :钉钉

返回参数:

字段名

类型

说明

success

Boolean

操作是否成功

result

object

用户信息:

spaceld{String} :服务空间ID

userld{string} :用户ID

oAuthUserld{String} :三方授权用户标识


三、实战: Serverless SDK 集成

1.注意:小程序如何去集成一个 npm 包?

此处有一依赖管理的页面,将需要的包名输入后点击回车,支付宝小程序 IDE 会将依赖下载

image.png

可能 IDE 会报错

选择支付宝页面的详情,然后进入项目详情,选中项目配置中的编译 node_modules 模块可以解决该错误:

image.png

编译正常:

image.png

2.如何集成 Serverless SDK ?

(1)实例化 mpserverless 的对象

首先可以在支付宝小程序中引入 mpserverless-sdk(注意:SDK 导出是 default 形式,所以不用以大括号的形式引入 mpserverless),然后进入 serverless 的实例化(因为导出的是 SDK 的一个实例对,所以将其实例化)

实例化接口:

image.png

该类接收为两部分,第一部分小程序所在的程序对象(比如现在是支付宝小程序,所以是 my,如果是微信小程序,则是 wx,钉钉小程序则是 dd),该部分为必填项。第二部分是鉴权信息,包括小程序 id,所使用的 spaceId(使用的服务空间 id),客户端密钥,endpoint(SDK 访问服务接口的域名).

实例化 mpserverless 的对象完成,为了方便使用,可以将该对象挂载在小程序的全局变量上,例如这里是挂载在 my. serverless 上的。以上只是初始化阶段,并没有完成鉴权。

补充:

小程序 id 的另一种获取方式,在完成小程序关联后也可以获取

image.png

spaceId 的获取,一定要是当前使用的服务空间,点击详情,获取到 spaceId

image.png

客户端密钥的获取:

可以在 spaceId 获取,Secret 下面就是客户端密钥

image.png

endpoint 的获取:

同样可以在 spaceId 获取,API endpoint 下面就是 endpoint

image.png

(2)SDK 的鉴权

只需要调用 my. serverless.init() 这个接口,就可以自动完成鉴权

App({

async onLaunch{options}{

//第一次打开

//option.query=={number=1}

await my.serverless.init();

console.info(‘App onLaunch’);

}

如果不知道是否有鉴权失败的可能,可以将参数返回:

App({

async onLaunch{options}{

//第一次打开

//option.query=={number=1}

const res=await my.serverless.init();

console.log(res)

console.info(‘App onLaunch’);

}

获取参数,此时可以知道该接口返回是成功的(提供 success 自愿,对信息做异常处理):

image.png


四、实战:云资源调用

在使用之前需要有云资源才能访问云函数

1.云函数的创建

点击新建云函数,输入名称,选择运行环境(这里新建了一个名为 helloServerless 的云函数)

image.png

2. 云资源的创建

可以在本地编写一个云函数的包,更新 js 代码后部署该代码,这样完成一个云资源的创建。

提供的一个简单云函数:

module.exports=async(ctx)=>{

const {name}=ctx.agrs;

return ‘hello world ${name}’;

该云函数有一个入参,名为 name ,返回的是一个字符串 hello world ${name}

强调:

本地编写的云函数一定要用 index.js 命名,并且打包要作为一个同名的 zip 文件打包(例如,云函数为 helloServerless ,则该代码必须为 index.js 代码,打包后为 helloServerless.zip )

演示:

第一次可能是上传,这里是更新 js 代码

image.png

然后点击部署:

image.png

部署成功后执行该代码:

image.png

点击确定,可以看到执行结果:

image.png

3.在 SDK 如何使用云资源

如果将 demo 下载完成后,可以根据以下步骤共同操作

打开 index.js 文件

(该 demo 是云函数SDK 的一些样例)

该处为 Serverless SDK 的使用规则:

例如,该云函数是使用 function 的功能群,调用时是使用名字 helloServerless,第二个参数是入参,这里是 name:’小明’。 返回结果为 requestId,result和success,可以将 result 信息提出,接口都是 promise 接口,写法可以根据自己喜好。

部分代码:

async callCloundFunction(){

const res=await my.serverless.function.invoke(“helloServerless”,{name:’小明‘});

this.setData({

functionResult:result

)}

}

执行后:

image.png

可以打印看网络请求的包

结果为:

image.png

也可以看到SDK 完整的返回结果:

部分代码:

async callCloundFunction(){

const res=await my.serverless.function.invoke(“helloServerless”,{name:’小明‘})

}

返回结果:

image.png

4.云数据库创建

新建数据表:

image.png

以 json 形式添加记录:

image.png

5.云数据库调用

这里提供了增删改查4个简单的示例

先看4个接口

(1)find 接口(查询):

db ,云数据库的功能群,db 下的 collection 去指定数据库的目标(这里是 hello),如何去指定一个方式 find。

age: (sgt:9) 是Mongo 筛选的一个格式,意思是筛选年龄大于9的记录。

find 接口是查询多个接口:

image.png

这里将4个年龄大于9的记录打印了

与 find 接口类似,有一个 叫 findOne 接口

有时在业务逻辑中只需要找到一条符合要求的记录,就可以使用该接口:

用法与 find 接口类似,筛选的格式为 age: (sgt:9)

效果为:

image.png

(2)insertOne接口(增加)

插入一条数据,只需要写入插入信息

该插入接口无返回值,可以通过查询多条记录看到插入的信息:

image.png

(3)updateOne 接口(更新)

首先筛选,这里筛选的是 name:’小伊’ 的对象,然后是如何去处理 update 的操作,这里使用 Mongo 中的 set 。这里将对象的 age 改为11

效果:

image.png

(4)deleteOne 接口(删除)

与插入一样,先筛选要删除的信息,这里删除 name为 ‘小伊’的一条记录

效果:

 image.png

小伊这条记录被删除

6.聚合操作

聚合操作可以多表名查,Sgroup 的操作

示例为 Sgroup 的操作

Sgroup:

{

_id:null

total={$sum:”$age”}

}

该代码表示没有规则的分组,去统计所有 age 的值

返回的对象是 age 和 id

第二部步使用了投影的操作:

Sproject:{

_id:0

}

可以将返回 id 、 age 或 sum ,不想要 id 这一项,就可以将 id 投影掉。(将 id 设置为0)

这样可以统计数据库中所有年龄之和:

image.png

7.用户信息

getInfo 接口

async getUserInfo(){

const{result:{user}}=await my.serverless.user.getInfo();

this.setData({

userResult: JSON.stringify(user)

})

},

查看该接口的返回内容:

 image.png

注意:使用该接口时,其 result 不是直接将应该返回的信息平铺开,还封了一个 user 对象。

可以打印出来:

async getUserInfo(){

const res=await my.serverless.user.getInfo();

console.log(res)

}

结果为:

image.png

8.云存储使用

先在控制台创建云资源:

点击上传文件

image.png

上传后:

image.png

可以查看该文件信息:

image.png


五、课程总结

这节课理论部分较少,主要在进行一些配置。主要学习两部分,一部分是作为一个开发者如何去接入 EMAS Serverless ,EMAS Serverless 的开发准备,该部分主要有两个大的准备,是开通支付宝小程序的支付宝账号及把开发者账号与 IDE 进行关联和 EMAS Serverless 密钥配置(将支付宝小程序开发者信息和支付宝公钥,包括应用的私钥配置到 EMAS Serverless 的控制台)。

完成这两部分才能去完成在代码层面上的 Serverless SDK 的集成。第二部分是讲 Serverless SDK 使用的优点,例如可以饱和,可以将鉴权这一层面的内容屏蔽给使用者,从而很简单的使用 Serverless 的资源。

然后介绍了 SDK 的四个功能块(云函数、云数据库、云存储、用户信息)的访问和使用。最后以一个实际的 demo 串讲了SDK 的使用方式,包括 SDK 如何在一个项目中去集成和使用,如何根据项目的接口规范去使用云函数、云数据库。

image.png

课后:打卡任务

01小程序密钥配置

02在控制台创建并调用云函数

03在控制台创建数据库表

04在控制台云存储上传图片

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
17天前
|
分布式计算 大数据 Apache
ClickHouse与大数据生态集成:Spark & Flink 实战
【10月更文挑战第26天】在当今这个数据爆炸的时代,能够高效地处理和分析海量数据成为了企业和组织提升竞争力的关键。作为一款高性能的列式数据库系统,ClickHouse 在大数据分析领域展现出了卓越的能力。然而,为了充分利用ClickHouse的优势,将其与现有的大数据处理框架(如Apache Spark和Apache Flink)进行集成变得尤为重要。本文将从我个人的角度出发,探讨如何通过这些技术的结合,实现对大规模数据的实时处理和分析。
52 2
ClickHouse与大数据生态集成:Spark & Flink 实战
|
1月前
|
Dart Android开发
鸿蒙Flutter实战:03-鸿蒙Flutter开发中集成Webview
本文介绍了在OpenHarmony平台上集成WebView的两种方法:一是使用第三方库`flutter_inappwebview`,通过配置pubspec.lock文件实现;二是编写原生ArkTS代码,自定义PlatformView,涉及创建入口能力、注册视图工厂、处理方法调用及页面构建等步骤。
48 0
|
2月前
|
监控 关系型数据库 MySQL
zabbix agent集成percona监控MySQL的插件实战案例
这篇文章是关于如何使用Percona监控插件集成Zabbix agent来监控MySQL的实战案例。
55 2
zabbix agent集成percona监控MySQL的插件实战案例
|
2月前
|
消息中间件 弹性计算 关系型数据库
体验函数计算:高效处理多媒体文件的真实感受与实战总结
该方案在引导和文档方面做得较为详尽,仅在事件驱动机制部分略显简略。部署和代码示例实用,但需注意内存配置以避免超时。使用体验方面,函数计算表现出色,尤其在高并发场景下,显著提升了应用稳定性和成本效益。云产品如OSS、MNS等与函数计算配合流畅,ECS和RDS表现稳健。总体而言,这套方案弹性好、成本低,特别适合应对高并发或流量不确定的场景,值得推荐。
68 24
|
3月前
|
机器学习/深度学习 存储 前端开发
实战揭秘:如何借助TensorFlow.js的强大力量,轻松将高效能的机器学习模型无缝集成到Web浏览器中,从而打造智能化的前端应用并优化用户体验
【8月更文挑战第31天】将机器学习模型集成到Web应用中,可让用户在浏览器内体验智能化功能。TensorFlow.js作为在客户端浏览器中运行的库,提供了强大支持。本文通过问答形式详细介绍如何使用TensorFlow.js将机器学习模型带入Web浏览器,并通过具体示例代码展示最佳实践。首先,需在HTML文件中引入TensorFlow.js库;接着,可通过加载预训练模型如MobileNet实现图像分类;然后,编写代码处理图像识别并显示结果;此外,还介绍了如何训练自定义模型及优化模型性能的方法,包括模型量化、剪枝和压缩等。
51 1
|
3月前
|
小程序 Serverless 开发工具
小程序开发问题之在小程序中安装并初始化小程序Serverless客户端SDK如何解决
小程序开发问题之在小程序中安装并初始化小程序Serverless客户端SDK如何解决
|
3月前
|
C# Windows 开发者
当WPF遇见OpenGL:一场关于如何在Windows Presentation Foundation中融入高性能跨平台图形处理技术的精彩碰撞——详解集成步骤与实战代码示例
【8月更文挑战第31天】本文详细介绍了如何在Windows Presentation Foundation (WPF) 中集成OpenGL,以实现高性能的跨平台图形处理。通过具体示例代码,展示了使用SharpGL库在WPF应用中创建并渲染OpenGL图形的过程,包括开发环境搭建、OpenGL渲染窗口创建及控件集成等关键步骤,帮助开发者更好地理解和应用OpenGL技术。
246 0
|
3月前
|
开发者 前端开发 开发框架
JSF与移动应用,开启全新交互体验!让你的Web应用轻松征服移动设备,让用户爱不释手!
【8月更文挑战第31天】在现代Web应用开发中,移动设备的普及使得构建移动友好的应用变得至关重要。尽管JSF(JavaServer Faces)主要用于Web应用开发,但结合Bootstrap等前端框架,也能实现优秀的移动交互体验。本文探讨如何在JSF应用中实现移动友好性,并通过示例代码展示具体实现方法。使用Bootstrap的响应式布局和组件可以确保JSF页面在移动设备上自适应,并提供友好的表单输入和提交体验。尽管JSF存在组件库较小和学习成本较高等局限性,但合理利用其特性仍能显著提升用户体验。通过不断学习和实践,开发者可以更好地掌握JSF应用的移动友好性,为Web应用开发贡献力量。
52 0
|
3月前
|
API UED 开发者
如何在Uno Platform中轻松实现流畅动画效果——从基础到优化,全方位打造用户友好的动态交互体验!
【8月更文挑战第31天】在开发跨平台应用时,确保用户界面流畅且具吸引力至关重要。Uno Platform 作为多端统一的开发框架,不仅支持跨系统应用开发,还能通过优化实现流畅动画,增强用户体验。本文探讨了Uno Platform中实现流畅动画的多个方面,包括动画基础、性能优化、实践技巧及问题排查,帮助开发者掌握具体优化策略,提升应用质量与用户满意度。通过合理利用故事板、减少布局复杂性、使用硬件加速等技术,结合异步方法与预设缓存技巧,开发者能够创建美观且流畅的动画效果。
79 0
|
3月前
|
JavaScript 开发者
从零基础到实战应用:Angular入门指南带你一步步构建你的第一个Web应用——全面介绍环境搭建、项目创建、组件开发与应用集成
【8月更文挑战第31天】本文档是针对初学者的Angular入门指南。通过详细步骤与示例代码,教你如何使用Angular CLI搭建开发环境、创建新项目、添加及配置组件,并运行首个应用。Angular是由Google开发的强大Web框架,专为高效构建复杂单页应用设计。按照本指南操作,你将能够快速上手Angular,开启Web应用开发之旅。
103 0

热门文章

最新文章

相关产品

  • 函数计算