騰訊云提出的云開發(fā)應(yīng)該已經(jīng)有一段時間。至于serverless是什么?不懂的同學(xué)可以移步至phodal大神的serverless。騰訊云借助于小程序快速發(fā)展走一波serverless。
它的優(yōu)勢在于弱化后端和運維概念,讓小企業(yè)和小團隊可以更容易地開發(fā)小程序胆剧。它首創(chuàng)的云調(diào)用將鑒權(quán)部分有效的封裝,讓你的接口很容易的實現(xiàn)了鑒權(quán)保護醉冤。當(dāng)然秩霍,大公司或者是具有成熟后臺團隊的公司,肯定不愿意將數(shù)據(jù)放在騰訊的服務(wù)端蚁阳,而且現(xiàn)在小程序云開發(fā)聲明收費事宜铃绒,具體可以參考配額。以國外的serverless服務(wù)的情況來看螺捐,都是按流量計費颠悬,借于騰訊的流量,云開發(fā)所消耗的費用也是一筆不小的數(shù)目定血,當(dāng)然那也是后話赔癌。哪有用別人東西不收費的情況,而且它還是“騰訊”澜沟。
云開發(fā)能力從基礎(chǔ)庫 2.2.3 開始支持(覆蓋率 97.3%灾票,查看兼容性問題),所以可以不需要考慮這點兼容性茫虽。
開始前刊苍,需要在你的代碼庫里面新建一個server的文件夾既们,如果你采用了第三方的框架,請你自行想一下解決方案正什。開發(fā)之前要搞清楚啥纸,你的代碼是寫在server
還是寫在client
里面,分別參考對應(yīng)服務(wù)端API和小程序端API婴氮。我相信有node開發(fā)經(jīng)驗的同學(xué)應(yīng)該很清楚這部分脾拆。如果涉及到遠程調(diào)度的同學(xué),HTTP API 文檔則是提供服務(wù)端調(diào)用的API莹妒,遠程控制數(shù)據(jù)庫以及數(shù)據(jù)導(dǎo)出遷移功能。
在這里绰上,著重介紹一下旨怠,云函數(shù)和云調(diào)用。
云函數(shù)
云函數(shù)是指運行在云端的代碼蜈块,也就是你server
文件夾里面的代碼鉴腻。
如果你了解不用云開發(fā)的openid獲取流程,你就知道openid的獲取是非常繁瑣的過程百揭,前端需要用過wx.login
獲取一個code值爽哎,code
值具有時效性。通過code值去后臺用appsecret去調(diào)取openid
和sessionkey
器一。unionid
的獲取就更為復(fù)雜课锌。
但是云函數(shù)由于是部署在騰訊云的關(guān)系,所以無需維護復(fù)雜的鑒權(quán)機制祈秕,云函數(shù)會帶上特殊的簽名機制渺贤,即可獲取天然可信任的用戶登錄態(tài),代碼如下请毛,注意node.js的代碼使用common.js的模塊化方案志鞍。
const cloud = require('wx-server-sdk')
exports.main = (event, context) => {
const {userInfo, a, b} = event
// 這里獲取到的 openId 和 appId 是可信的
const {OPENID, APPID} = cloud.getWXContext()
const sum = a + b
return {
OPENID,
APPID,
sum
}
}
云函數(shù)的構(gòu)建就是前端小程序可以直接通過wx.cloud.callFunction
調(diào)用。這樣方仿,團隊內(nèi)不需要后端工程師以及運維人員固棚。
// server.js
exports.main = async (event, context) => ({
sum: event.a + event.b
})
// client.js
wx.cloud.callFunction({
// 云函數(shù)名稱
name: 'add',
// 傳給云函數(shù)的參數(shù)
data: {
a: 1,
b: 2,
},
})
.then(res => {
console.log(res.result) // 3
})
.catch(console.error)
云調(diào)用
云調(diào)用是指需要access token
才能調(diào)用的供服務(wù)端調(diào)用的接口,由于access token
只有7200秒的有效期仙蚜,要定時去獲取此洲。對于小程序而言,測試和生產(chǎn)如果共用一個小程序鳍征,會有沖突的風(fēng)險黍翎。這部分的處理是需要非常小心的。
云調(diào)用的使用則是減輕這些功能的使用難度艳丛,無需獲取access token
匣掸。openapi
的使用讓小程序更面向前端趟紊,方便前端工程師的開發(fā)。下面是關(guān)于消息模版推送的代碼碰酝。在開發(fā)之前需要配置一下權(quán)限霎匈,詳情參考。
const cloud = require('wx-server-sdk')
cloud.init()
exports.main = async (event, context) => {
const result = await cloud.openapi.templateMessage.send({
touser: cloud.getWXContext().OPENID,
page: 'index',
data: {
keyword1: {
value: '339208499'
},
keyword2: {
value: '2015年01月05日 12:30'
},
keyword3: {
value: '騰訊微信總部'
},
keyword4: {
value: '廣州市海珠區(qū)新港中路397號'
}
},
templateId: 'TEMPLATE_ID',
formId: 'FORMID',
emphasisKeyword: 'keyword1.DATA'
})
// result 結(jié)構(gòu)
// { errCode: 0, errMsg: 'openapi.templateMessage.send:ok' }
return result
}