小螞蟻說:
在今天下午的雲棲 ATEC 大會上,Basement 後端雲服務正式對外開放!首先服務支付寶小程序場景,提供貼身服務。為了促進支付寶小程序更好發展,螞蟻金服還將重磅投入了一億元雲基金,給到包含 Basement 後端雲服務在內的一站式小程序雲計劃。
Serverless 與前端
作為前端,當我們要開發一個新應用時,可能只要很短時間就可以搞定前端,但涉及服務端,卻因為要關注服務器、數據庫、文件存儲、域名備案等等,需要耗費大量精力。
![Basement 後端雲服務正式亮相雲棲大會!](http://p2.ttnews.xyz/loading.gif)
使用 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 後端雲服務正式亮相雲棲大會!](http://p2.ttnews.xyz/loading.gif)
代碼示例
Talk is cheap, show me the code.
Basement 擁有下面這些特色能力,尤其在雲函數里可直接調用支付寶開放平臺接口,非常方便。
下面,我們通過具體的代碼示例讓大家來快速瞭解幾大重點能力。
雲函數
雲函數支持使用 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.deleteFile({ fileUrl: ctx.args.fileUrl });
return res;};
為了讓大家能夠近距離體驗到 Basement,在 9.19-9.21 雲棲大會 ATEC 展館裡舉辦了小程序雲+端挑戰賽,以及集訓營,在這可以近距離接觸到 Basement 後端雲開發團隊。因極簡的開發模式,昨天現場一位 11 歲小朋友,都輕鬆上手,贏得比賽鼓勵獎:)
無法到現場的同學,我們還提供了在線示例(請複製鏈接至瀏覽器打開):
https://tech.antfin.com/codelabs/eouxrp
目前 Basement 尚在公測期,採用邀請制,有興趣可以打開下方鏈接申請公測資格哦:
http://render.46mlsv.com/p/f/fd-jmadfkyf/pages/home/index.html
— END —
螞蟻金服官方唯一對外技術傳播渠道
投稿郵箱:[email protected]
閱讀更多 螞蟻金服科技 的文章