小程序·云開發(fā) 項目開發(fā)經(jīng)驗分享

近期,小程序開放了新的能力——「小程序·云開發(fā)」,幫助開發(fā)者快速構(gòu)建微信小程序的后端服務(wù)。我作為一名微信小程序的開發(fā)者,也在第一時間嘗試了小程序云開發(fā),并將我自己在開發(fā)過程中的經(jīng)驗分享給大家。

小程序云開發(fā)是什么

簡單的來說,小程序云開發(fā)是一款 Serverless 服務(wù),他為開發(fā)者提供了「云函數(shù)」、「云數(shù)據(jù)庫」和「云文件存儲」,并且將這些能力封裝成特定的接口,以 wx.cloud.xxx 來進行調(diào)用。

小程序云開發(fā)不是什么

首先,小程序云開發(fā)不是 PaaS ,它和我們所熟悉的 BAE、Google App Engine 不同,所提供的云函數(shù)并不是完整的環(huán)境,而是以一個特定的事件為單位的。嚴(yán)格來說,它所提供的云函數(shù)功能其實是 FaaS (Function as a Service),同類型的產(chǎn)品有 LeanCloud 的云函數(shù)、 Bmob 的云函數(shù)、AWS 的 Lambda、 Azure 的 Functions 和 Google Cloud Functions。

其次,小程序云開發(fā)不是 LeanCloud 、 Bmob 之類的 BaaS 。不同于上述的兩款產(chǎn)品,他們提供了豐富的 API 接口,能夠?qū)崿F(xiàn)各種各樣的功能,小程序·云開發(fā)將接口進行深度的封裝,僅能在小程序、云函數(shù)中通過 wx.cloud 和 wx-server-sdk 來調(diào)用(截止2018年8月24日)。因此,小程序云開發(fā) 僅能應(yīng)用在小程序中,無法在其他產(chǎn)品中應(yīng)用(比如 App )

小程序云開發(fā)適合什么樣的場景?

所有的業(yè)務(wù)邏輯都僅僅需要在小程序端完成,無需過于復(fù)雜的管理邏輯(這是因為云函數(shù)、云數(shù)據(jù)庫無法在小程序以外的區(qū)域調(diào)用,因此無法實現(xiàn)強大的 Web 管理界面)

小程序云開發(fā)的優(yōu)勢

1. 微信登錄邏輯簡單

小程序云開發(fā)可以自動實現(xiàn)用戶登錄的校驗,開發(fā)者無需再次校驗用戶身份,直接通過云函數(shù)的 event.userInfo.openId 即可獲取到用戶信息。直接調(diào)用數(shù)據(jù)庫 、文件存儲 API 時,也會自動關(guān)聯(lián)到用戶對應(yīng)的 openId

image

如果用戶授權(quán)小程序獲取昵稱等信息,這些信息也會自動出現(xiàn)在小程序云開發(fā)的管理控制臺中的用戶登錄部分。不需要開發(fā)者手動上傳。

2. 免費

目前小程序云開發(fā)提供了免費 1GB 的數(shù)據(jù)庫存儲和 免費 5 GB 的文件存儲,這個存儲量并不是很大,但是對于一些個人開發(fā)者來說,還是綽綽有余的,開發(fā)者可以使用這些容量來快速開發(fā)自己的小程序。

image

3. 簡單

小程序云開發(fā)的調(diào)用非常的簡單,你只需要了解 JavaScript 和一些簡單的異步的知識 (promise),就可以完成小程序云開發(fā)的內(nèi)容。

4. 無侵入

小程序云開發(fā)本身是在小程序的基礎(chǔ)庫層面的封裝,你無需再引入其他庫就可以使用。

同樣的,你也可以在原有的應(yīng)用程序中,將一部分功能遷移到小程序云開發(fā)中。

小程序開發(fā)過程中遇到的一些坑

1. 異步請求需要通過 Promise 來處理

在云函數(shù)中,我們大多會實現(xiàn)一些在小程序中無法實現(xiàn),或受域名限制的請求接口,這時我們不能使用傳統(tǒng)的 Callback 方法來進行請求,因為傳統(tǒng)的 callback 方法執(zhí)行完成后,云函數(shù)早已將數(shù)據(jù)返回給客戶端,我們需要使用 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. 權(quán)限結(jié)構(gòu)比較簡單

image

小程序云開發(fā)提供的數(shù)據(jù)庫權(quán)限非常簡單,僅有四種。

  • 僅創(chuàng)建者可寫,所有人可讀:數(shù)據(jù)只有創(chuàng)建者可寫、所有人可讀;比如文章。
  • 僅創(chuàng)建者可讀寫:數(shù)據(jù)只有創(chuàng)建者可讀寫,其他用戶不可讀寫;比如用私密相冊。
  • 僅管理端可寫,所有人可讀:該數(shù)據(jù)只有管理端可寫,所有人可讀;如商品信息。
  • 僅管理端可讀寫:該數(shù)據(jù)只有管理端可讀寫;如后臺用的不暴露的數(shù)據(jù)。

對于絕大多數(shù)情況下,簡單的使用這四種權(quán)限根本無法滿足我們的要求,因此,我們還需要在代碼層面進行一些判斷來確保具體的表現(xiàn)如我們所想的那樣。

比如,在做一個書柜的項目時,希望書柜里的書可以設(shè)置可被第三方查看和不可被第三方查看,這時你只能將集合的數(shù)據(jù)設(shè)置為「僅創(chuàng)建者可寫,所有人可讀」,并通過代碼來控制具體信息是否顯示,比如加入一個 is_private 字段來進行控制。

廣告時間

關(guān)于微信小程序 · 云開發(fā),我寫了一個 Demo 項目,放在 Github 上,歡迎大家來 Star ,來 Fork ,來提 PR。

項目地址:https://github.com/Tencent-CloudEDU/WXCloud-bookcase

image

此外,針對該項目,還準(zhǔn)備了一個免費實戰(zhàn)開發(fā)項目,大家可以訪問 https://cloud.tencent.com/developer/edu/course-100005-1244 查看。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容