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

本文涉及的产品
函数计算FC,每月15万CU 3个月
Serverless 应用引擎免费试用套餐包,4320000 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 架构模式
相关文章
|
1天前
|
IDE 开发工具
鸿蒙Flutter实战:11-使用 Flutter SDK 3.22.0
本文介绍了如何使用 Flutter SDK 3.22.0 搭建鸿蒙开发环境。首先安装 Flutter SDK 3.22.0,并通过 FVM 管理多个版本。接着配置项目,使用 `fvm use custom_3.22.0` 设置自定义 SDK 版本。添加鸿蒙平台支持并进行项目签名,最后通过 `fvm flutter run` 运行项目。详细步骤包括安装、项目配置、签名和运行,确保开发环境顺利搭建。
15 7
鸿蒙Flutter实战:11-使用 Flutter SDK 3.22.0
|
3月前
|
Java jenkins Shell
jenkins学习笔记之五:Maven、Ant、Gradl、Node构建工具集成
jenkins学习笔记之五:Maven、Ant、Gradl、Node构建工具集成
|
3月前
|
jenkins 持续交付
jenkins学习笔记之六:共享库方式集成构建工具
jenkins学习笔记之六:共享库方式集成构建工具
|
3月前
|
小程序 Serverless 开发工具
小程序开发问题之在小程序中安装并初始化小程序Serverless客户端SDK如何解决
小程序开发问题之在小程序中安装并初始化小程序Serverless客户端SDK如何解决
|
4月前
|
JSON 运维 Serverless
Serverless 应用引擎使用问题之ThinkPHP框架是否有基于SDK的demo
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
3月前
|
jenkins 持续交付
jenkins学习笔记之九:jenkins认证集成github
jenkins学习笔记之九:jenkins认证集成github
|
3月前
|
安全 jenkins 持续交付
jenkins学习笔记之八:jenkins认证集成gitlab
jenkins学习笔记之八:jenkins认证集成gitlab
|
3月前
|
jenkins Devops 持续交付
jenkins学习笔记之七:jenkins集成LDAP用户认证
jenkins学习笔记之七:jenkins集成LDAP用户认证
|
4月前
|
Serverless 语音技术 开发工具
函数计算操作报错合集之怎么何集成nls tts python sdk
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。
|
4月前
|
机器学习/深度学习 Serverless API
函数计算操作报错合集之调用SDK报错 "InvalidAction.Mismatch",该怎么办
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。

热门文章

最新文章

相关产品

  • 函数计算