微信小程序云開發(fā) 云開發(fā)能力

2022-05-12 15:53 更新

小程序·云開發(fā)提供了多個基礎(chǔ)能力,以下對各個主要能力介紹。

數(shù)據(jù)庫

云開發(fā)提供了一個 JSON 數(shù)據(jù)庫,顧名思義,數(shù)據(jù)庫中的每條記錄都是一個 JSON 格式的對象。一個數(shù)據(jù)庫可以有多個集合(相當(dāng)于關(guān)系型數(shù)據(jù)中的表),集合可看做一個 JSON 數(shù)組,數(shù)組中的每個對象就是一條記錄,記錄的格式是 JSON 對象。

關(guān)系型數(shù)據(jù)庫和 JSON 數(shù)據(jù)庫的概念對應(yīng)關(guān)系如下表:

關(guān)系型文檔型
數(shù)據(jù)庫 database數(shù)據(jù)庫 database
表 table集合 collection
行 row記錄 record / doc
列 column字段 field

以下是一個示例的集合數(shù)據(jù),假設(shè)我們有一個 books 集合存放了圖書記錄,其中有兩本書:

[
  {
    "_id": "Wzh76lk5_O_dt0vO",
    "title": "The Catcher in the Rye",
    "author": "J. D. Salinger",
    "characters": [
      "Holden Caulfield",
      "Stradlater",
      "Mr. Antolini"
    ],
    "publishInfo": {
      "year": 1951,
      "country": "United States"
    }
  },
  {
    "_id": "Wzia0lk5_O_dt0vR",
    "_openid": "ohl4L0Rnhq7vmmbT_DaNQa4ePaz0",
    "title": "The Lady of the Camellias",
    "author": "Alexandre Dumas fils",
    "characters": [
      "Marguerite Gautier",
      "Armand Duval",
      "Prudence",
      "Count de Varville"
    ],
    "publishInfo": {
      "year": 1848,
      "country": "France"
    }
  }
]

在圖書信息中,我們用 title, author 來記錄圖書標(biāo)題和作者,用 characters 數(shù)組來記錄書中的主要人物,用 publishInfo 來記錄圖書的出版信息。在其中我們可以看到,字段既可以是字符串或數(shù)字,還可以是對象或數(shù)組,就是一個 JSON 對象。

每條記錄都有一個 _id 字段用以唯一標(biāo)志一條記錄、一個 _openid 字段用以標(biāo)志記錄的創(chuàng)建者,即小程序的用戶。需要特別注意的是,在管理端(控制臺和云函數(shù))中創(chuàng)建的不會有 _openid 字段,因為這是屬于管理員創(chuàng)建的記錄。開發(fā)者可以自定義 _id,但不可自定義和修改 _openid 。_openid 是在文檔創(chuàng)建時由系統(tǒng)根據(jù)小程序用戶默認(rèn)創(chuàng)建的,開發(fā)者可使用其來標(biāo)識和定位文檔。

數(shù)據(jù)庫 API 分為小程序端和服務(wù)端兩部分,小程序端 API 擁有嚴(yán)格的調(diào)用權(quán)限控制,開發(fā)者可在小程序內(nèi)直接調(diào)用 API 進(jìn)行非敏感數(shù)據(jù)的操作。對于有更高安全要求的數(shù)據(jù),可在云函數(shù)內(nèi)通過服務(wù)端 API 進(jìn)行操作。云函數(shù)的環(huán)境是與客戶端完全隔離的,在云函數(shù)上可以私密且安全的操作數(shù)據(jù)庫。

數(shù)據(jù)庫 API 包含增刪改查的能力,使用 API 操作數(shù)據(jù)庫只需三步:獲取數(shù)據(jù)庫引用、構(gòu)造查詢/更新條件、發(fā)出請求。以下是一個在小程序中查詢數(shù)據(jù)庫的發(fā)表于美國的圖書記錄的例子:

// 1. 獲取數(shù)據(jù)庫引用
const db = wx.cloud.database()
// 2. 構(gòu)造查詢語句
// collection 方法獲取一個集合的引用
// where 方法傳入一個對象,數(shù)據(jù)庫返回集合中字段等于指定值的 JSON 文檔。API 也支持高級的查詢條件(比如大于、小于、in 等),具體見文檔查看支持列表
// get 方法會觸發(fā)網(wǎng)絡(luò)請求,往數(shù)據(jù)庫取數(shù)據(jù)
db.collection('books').where({
  publishInfo: {
    country: 'United States'
  }
}).get({
  success: function(res) {
  // 輸出 [{ "title": "The Catcher in the Rye", ... }]
  console.log(res)
 }
})

更多的數(shù)據(jù)庫的 API 的使用和數(shù)據(jù)庫管理,可以參考數(shù)據(jù)庫指引章節(jié)。

存儲

云開發(fā)提供了一塊存儲空間,提供了上傳文件到云端、帶權(quán)限管理的云端下載能力,開發(fā)者可以在小程序端和云函數(shù)端通過 API 使用云存儲功能。

在小程序端可以分別調(diào)用 wx.cloud.uploadFile 和 wx.cloud.downloadFile 完成上傳和下載云文件操作。下面簡單的幾行代碼,即可實現(xiàn)在小程序內(nèi)讓用戶選擇一張圖片,然后上傳到云端管理的功能:

// 讓用戶選擇一張圖片
wx.chooseImage({
  success: chooseResult => {
    // 將圖片上傳至云存儲空間
    wx.cloud.uploadFile({
      // 指定上傳到的云路徑
      cloudPath: 'my-photo.png',
      // 指定要上傳的文件的小程序臨時文件路徑
      filePath: chooseResult.tempFilePaths[0],
      // 成功回調(diào)
      success: res => {
        console.log('上傳成功', res)
      },
    })
  },
})

上傳完成后可在控制臺中看到剛上傳的圖片。

更多的存儲 API 和管理,可以參考存儲指引章節(jié)。

云函數(shù)

云函數(shù)是一段運行在云端的代碼,無需管理服務(wù)器,在開發(fā)工具內(nèi)編寫、一鍵上傳部署即可運行后端代碼。

小程序內(nèi)提供了專門用于云函數(shù)調(diào)用的 API。開發(fā)者可以在云函數(shù)內(nèi)使用 wx-server-sdk 提供的 getWXContext 方法獲取到每次調(diào)用的上下文(appid、openid 等),無需維護(hù)復(fù)雜的鑒權(quán)機(jī)制,即可獲取天然可信任的用戶登錄態(tài)(openid)。

比如我們?nèi)缦露x一個云函數(shù),命名為 add ,功能是將傳入的兩個參數(shù) a 和 b 相加:

// index.js 是入口文件,云函數(shù)被調(diào)用時會執(zhí)行該文件導(dǎo)出的 main 方法
// event 包含了調(diào)用端(小程序端)調(diào)用該函數(shù)時傳過來的參數(shù),同時還包含了可以通過 getWXContext 方法獲取的用戶登錄態(tài) `openId` 和小程序 `appId` 信息
const cloud = require('wx-server-sdk')
exports.main = (event, context) => {
  let { userInfo, a, b} = event
  let { OPENID, APPID } = cloud.getWXContext() // 這里獲取到的 openId 和 appId 是可信的
  let sum = a + b

  return {
    OPENID,
    APPID,
    sum
  }
}

在開發(fā)者工具中上傳部署云函數(shù)后,我們在小程序中可以這么調(diào)用:

除了部署云函數(shù)進(jìn)行調(diào)用外,我們還支持云函數(shù)本地調(diào)試,可以不用部署云函數(shù)即可測試
wx.cloud.callFunction({
  // 需調(diào)用的云函數(shù)名
  name: 'add',
  // 傳給云函數(shù)的參數(shù)
  data: {
    a: 12,
    b: 19,
  },
  // 成功回調(diào)
  complete: console.log
})
// 當(dāng)然 promise 方式也是支持的
wx.cloud.callFunction({
  name: 'add',
  data: {
    a: 12,
    b: 19
  }
}).then(console.log)

如需在云函數(shù)中操作數(shù)據(jù)庫、管理云文件、調(diào)用其他云函數(shù)等操作,可使用官方提供的 npm 包 wx-server-sdk 進(jìn)行操作。

更多的云函數(shù)管理和 API,可以參考云函數(shù)指引章節(jié)。

云調(diào)用

云調(diào)用是云開發(fā)提供的基于云函數(shù)使用小程序開放接口的能力,支持在云函數(shù)調(diào)用服務(wù)端開放接口,如發(fā)送模板消息、獲取小程序碼等操作都可以在云函數(shù)中完成,詳情可見具體開發(fā)指引。

HTTP API

云開發(fā)資源也可以通過 HTTP 接口訪問,即在小程序外訪問,接口見HTTP API 文檔。

通過這個章節(jié),我們已經(jīng)了解了云開發(fā)是什么,提供了哪些能力,能做什么,接下來跟著我們一起進(jìn)入開發(fā)指引的章節(jié),看看如何上手開發(fā)吧!


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號