Basement 後端雲服務正式亮相雲棲大會
Serverless 與前端
作為前端,當我們要開發一個新應用時,可能只要很短時間就可以搞定前端,但涉及服務端,卻因為要關注伺服器、資料庫、檔案儲存、域名備案等等,需要耗費大量精力。

使用 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 後端雲服務在內的一站式小程式雲計劃。

程式碼示例
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。
// 選擇並上傳圖片,獲得圖片 URL attach() { 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 歲小朋友,都輕鬆上手,贏得比賽鼓勵獎:)
無法到現場的同學,我們還提供了線上示例 可直接檢視。目前 Basement 尚在公測期,採用邀請制,有興趣可以點此申請公測資格。