近期,小程序開放了新的能力——「小程序·云開發」,幫助開發者快速構建微信小程序的后端服務。
小程序云開發是什么
簡單的來說,小程序云開發是一款 Serverless 服務,他為開發者提供了「云函數」、「云數據庫」和「云文件存儲」,并且將這些能力封裝成特定的接口,以 wx.cloud.xxx 來進行調用。
小程序云開發不是什么
首先,小程序云開發不是 PaaS ,它和我們所熟悉的 BAE、google App Engine 不同,所提供的云函數并不是完整的環境,而是以一個特定的事件為單位的。嚴格來說,它所提供的云函數功能其實是 FaaS (Function as a Service),同類型的產品有 LeanCloud 的云函數、 Bmob 的云函數、AWS 的 Lambda、 Azure 的 Functions 和 Google Cloud Functions。
其次,小程序云開發不是 LeanCloud 、 Bmob 之類的 BaaS 。不同于上述的兩款產品,他們提供了豐富的 API 接口,能夠實現各種各樣的功能,小程序·云開發將接口進行深度的封裝,僅能在小程序、云函數中通過 wx.cloud 和 wx-server-sdk 來調用(截止2018年8月24日)。因此,小程序云開發 僅能應用在小程序中,無法在其他產品中應用(比如 App )
小程序云開發適合什么樣的場景?
所有的業務邏輯都僅僅需要在小程序端完成,無需過于復雜的管理邏輯(這是因為云函數、云數據庫無法在小程序以外的區域調用,因此無法實現強大的 Web 管理界面)
小程序云開發的優勢
1. 微信登錄邏輯簡單
小程序云開發可以自動實現用戶登錄的校驗,開發者無需再次校驗用戶身份,直接通過云函數的 event.userInfo.openId 即可獲取到用戶信息。直接調用數據庫 、文件存儲 API 時,也會自動關聯到用戶對應的 openId
image
如果用戶授權小程序獲取昵稱等信息,這些信息也會自動出現在小程序云開發的管理控制臺中的用戶登錄部分。不需要開發者手動上傳。
2. 免費
目前小程序云開發提供了免費 1GB 的數據庫存儲和 免費 5 GB 的文件存儲,這個存儲量并不是很大,但是對于一些個人開發者來說,還是綽綽有余的,開發者可以使用這些容量來快速開發自己的小程序。
image
3. 簡單
小程序云開發的調用非常的簡單,你只需要了解 JAVAScript 和一些簡單的異步的知識 (promise),就可以完成小程序云開發的內容。
4. 無侵入
小程序云開發本身是在小程序的基礎庫層面的封裝,你無需再引入其他庫就可以使用。
同樣的,你也可以在原有的應用程序中,將一部分功能遷移到小程序云開發中。
小程序開發過程中遇到的一些坑
1. 異步請求需要通過 Promise 來處理
在云函數中,我們大多會實現一些在小程序中無法實現,或受域名限制的請求接口,這時我們不能使用傳統的 Callback 方法來進行請求,因為傳統的 callback 方法執行完成后,云函數早已將數據返回給客戶端,我們需要使用 Promise 來處理。
比如,下面的代碼是我請求豆瓣 API 的代碼。
var rp = require('request-promise') exports.main = (event, context) => { var res = rp('https://api.douban.com/v2/book/isbn/'+ event.isbn).then( html => { return html; }).catch( err => { console.log(err); }) return res }
上述代碼出自 Github 項目 WXCloud-bookcase
2. 權限結構比較簡單
image
小程序云開發提供的數據庫權限非常簡單,僅有四種。
- 僅創建者可寫,所有人可讀:數據只有創建者可寫、所有人可讀;比如文章。
- 僅創建者可讀寫:數據只有創建者可讀寫,其他用戶不可讀寫;比如用私密相冊。
- 僅管理端可寫,所有人可讀:該數據只有管理端可寫,所有人可讀;如商品信息。
- 僅管理端可讀寫:該數據只有管理端可讀寫;如后臺用的不暴露的數據。
對于絕大多數情況下,簡單的使用這四種權限根本無法滿足我們的要求,因此,我們還需要在代碼層面進行一些判斷來確保具體的表現如我們所想的那樣。
比如,在做一個書柜的項目時,希望書柜里的書可以設置可被第三方查看和不可被第三方查看,這時你只能將集合的數據設置為「僅創建者可寫,所有人可讀」,并通過代碼來控制具體信息是否顯示,比如加入一個 is_private 字段來進行控制