软件开发架构师

Basement 后端云服务正式亮相云栖大会-InfoQ

大数据 108 2019-09-02 16:15

小蚂蚁说:

在今天下午的云栖 ATEC 大会上,Basement 后端云服务正式对外开放!首先服务支付宝小程序场景,提供贴身服务。为了促进支付宝小程序更好发展,蚂蚁金服还将重磅投入了一亿元云基金,给到包含 Basement 后端云服务在内的一站式小程序云计划。

Serverless 与前端

作为前端,当我们要开发一个新应用时,可能只要很短时间就可以搞定前端,但涉及服务端,却因为要关注服务器、数据库、文件存储、域名备案等等,需要耗费大量精力。

Basement 后端云服务正式亮相云栖大会-InfoQ-1

使用 Serverless 服务无疑是解决这个问题很合适的方式,它天然为前端而生,近几年 AWS、Google Cloud 等云厂商中都在大幅推广。什么是 Serverless?在 Martin Fowler 观点里,包含 BaaS(Backend as a Service)、FaaS(Functions as a Service)两部分,尤其随着容器化技术日渐成熟,越来越多原先的 BaaS 平台开始补足自己的函数计算能力,让用户可以更加完整的构建应用。

有了 Serverless 服务,我们不再需要关心服务端运维,在客户端即可完成数据存储、文件存储调用,通过云函数便能搞定服务端代码、异步处理逻辑等。这些服务一般都是按使用量计费,可自动弹性扩容,非常适合初创型产品,大幅降低投入成本。

使用 Basement 后端云服务快速打造小程序

Basement 后端云就是这样一个 Serverless 服务,诞生于蚂蚁体验科技,底层依托于蚂蚁强大稳定的金融科技平台,在过去几年里,一直服务内部 web 开发者们。在今天下午的云栖 ATEC 大会上,Basement 后端云服务正式对外开放,首先服务支付宝小程序场景,提供贴身服务。支付宝小程序事业部负责人何勇明还现场宣布将为一站式小程序云计划投入了一亿元云基金,此计划包含 Basement 后端云服务、云端应用开发等。”

Basement 后端云服务正式亮相云栖大会-InfoQ-2

代码示例

Talk is cheap, show me the code.

Basement 拥有下面这些特色能力,尤其在云函数里可直接调用支付宝开放平台接口,非常方便。
Basement 后端云服务正式亮相云栖大会-InfoQ-3

下面,我们通过具体的代码示例让大家来快速了解几大重点能力。

云函数

云函数支持使用 Node.js 进行开发,大家可通过小程序 IDE 将代码提交到云端,然后在客户端使用 Basement 提供的 API 进行调用,开发者还可以在云函数中直接通过 API 调用数据存储和文件存储的服务资源。

搭配支付宝小程序使用云函数,免配置操作,可以直接调用支付宝开放平台的海量 OpenAPI 接口。

复制代码
exports.create = async (ctx) => {
// @ see https://docs .open .alipay .com/api_2/alipay .user .info .share
// 通过 OpenAPI 获取用户信息
const userInfo = await ctx .basement .openapi .alipay .exec('alipay .user .info .share');
// @ see https://docs .open .alipay .com/api_1/alipay .trade .create
// 通过 OpenAPI 创建订单
const order = await ctx .basement .openapi .alipay .exec('alipay .trade .create', {
outTradeNo: `${Date .now()}${userInfo .userId}`, // 外部流水号,需要保证唯一性
buyerId: userInfo .userId, // 付款用户的 userId
totalAmount: ctx .args .amount, // 金额
subject: ctx .args .subject, // 描述
});
// 返回支付结果
return { order };};

数据存储

数据存储服务是基于 MongoDB 托管在云端的数据库,数据以 JSON 格式存储。大家可以在客户端(如支付宝小程序)内直接操作数据,也可以在云函数中读写数据。

在小程序客户端代码里,我们可以通过 basement.db 对象调用数据存储的大量 API 方法。比如:我们要获得当前存储的所有集合名词列表。

复制代码
basement.db.collections(). then( (res) => {
this.setData({ collectionNames: res.result });}). catch( console.error);

云函数内则可直接调用(不需要安装 SDK)同一个云服务的数据存储服务。下面是一个云函数调用的例子,同样是获得所有集合名称的列表。

复制代码
module.exports = async (ctx) => {
const res = await ctx.basement.db.collections();
return res.result;};

文件存储

文件存储服务支持文本、图片等内容存储到云端后,可通过高速 CDN 访问。同样也是可在客户端直接上传,或云函数里直接上传和读取文件,目前主要支持图片作为文件上传。

在客户端,我们可以通过 basement.file 对象调用文件存储的大量 API 方法。比如:我们将小程序客户端中选中的图片进行上传,获得图片 URL。

复制代码
// 选择并上传图片,获得图片 URLattach() {
my.chooseImage({
chooseImage: 1,
success: res => {
const path = res.apFilePaths[ 0];
const options = {
filePath: path,
headers: {
contentDisposition: 'attachment',
},
};
basement.file.uploadFile(options).then( (image) => {
console.log(image);
this.setData({
imageUrl: image.fileUrl,
});
}).catch( console.log);
},
});},

云函数可直接调用(不需要安装 SDK)同一个云服务的文件存储服务。下面是一个云函数调用的例子,将上述客户端中上传的图片删除掉。

复制代码
module.exports = async (ctx) => { // ctx.args 是从客户端传过来的参数
const res = await ctx.basement.file.delete File({ fileUrl: ctx.args.fileUrl });
return res;};

为了让大家能够近距离体验到 Basement,在 9.19-9.21 云栖大会 ATEC 展馆里举办了小程序云 + 端挑战赛,以及集训营,在这可以近距离接触到 Basement 后端云开发团队。因极简的开发模式,昨天现场一位 11 岁小朋友,都轻松上手,赢得比赛鼓励奖:)

无法到现场的同学,我们还提供了在线示例(请复制链接至浏览器打开):

https://tech.antfin.com/codelabs/eouxrp

目前 Basement 尚在公测期,采用邀请制,有兴趣可以点击阅读原文申请公测资格哦。

本文转载自公众号蚂蚁金服科技(ID:Ant-Techfin)。

原文链接:

https://mp.weixin.qq.com/s/38LVVC6xtXroVLTcIfbSHQ

文章评论