小程式·雲開發初級FAQ

netwjx曹宇發表於2019-03-04

之前參加過小程式·雲開發相關的分享, 在團隊內進行了推廣, 感覺官方的宣傳不夠直接, 還是太玄乎了, 這是收集了貓眼娛樂前端工程師的問題, 和相關答疑, 部分問題是和小程式·雲開發的同學溝通過的結論

主要面向初級前端工程師, 快速瞭解雲開發是怎麼回事, 不涉及複雜程式碼

  • 有小程式開發經驗
  • 理解 server 端基礎, 並有少量node.js server端經驗

1. 小程式雲開發是什麼?

官方文件, 不用著急點, 下面FAQ未提及的可以進來看

主要提供兩種能力

1.1 提供持久儲存

持久儲存是指刪除微信或更換手機後, 使用者重新開啟我們的小程式, 仍舊能讓使用者看到自己的資訊

主要通過兩種儲存容器

  1. 類mangodb的資料庫儲存, 比如使用者提交的文章
  2. 檔案儲存, 比如使用者上傳的照片

1.2 提供簡化的server端程式設計環境

雲函式

簡單解釋: 在小程式端寫上函式名 + 引數, 就能呼叫遠端的一個函式

為什麼不直接寫到小程式端, 而要繞彎子要這樣? 最常見的原因是:

  1. 有些業務邏輯涉及保密資訊, 不能寫在小程式上, 比如: 價格計算, 交易流程
  2. 有些操作需要更高的許可權, 比如: 管理員可以刪除所有使用者的資料.
  3. 橋接到第三方介面, 小程式https介面域名數量超限, 或者第三方介面不是https介面.

2. 直接運算元據庫會不會有安全問題

雲開發的資料庫和傳統資料庫有些區別, 他會自動給每個資料表增加一個建立人欄位 + 表許可權設定, 後續的操作都會基於這些約束, 一般的策略是

  1. 每個使用者只能修改自己建立的資訊, 比如自己發的文章
  2. 每個使用者只能讀取其他使用者的資訊, 但不能修改, 比如其他人發的文章
  3. 每個使用者只能讀取公共資訊, 但不能修改, 比如公告資訊, 一般會允許通過管理端修改

3. 直接操作檔案儲存會不會有安全風險

類似上一個資料庫的許可權, 通過檔案建立人 + 資料夾許可權設定

檔案的操作使用服務端生成的唯一ID, 不會被窮舉

4. 別人會不會呼叫我的雲函式

不會, 雲函式的網路協議是私有的, 並且有加上數字簽名驗證

這套機制是在微信app內部實現的, 除非微信這套機制被攻破

5.雲函式是用js寫麼, 執行環境是什麼?

是js, 執行環境是nodejs 8.9, 支援async await關鍵字

目前還不支援修改執行環境, 未來應該會支援自選環境

6. 使用了雲開發, 是不是就不能使用自己的服務端了

不是, 兩個可以並存, 就當是看起來不一樣的非同步呼叫就好

// 雲開發相關api
wx.cloud.xxxx()

// 自有服務
wx.request()
複製程式碼

由於是nodejs的執行環境, 所以雲函式可以使用http tcp模組, 這樣就能通過雲函式轉發請求到任意域名, 不受小程式端的請求域名限制

7. 典型的雲函式是什麼樣的?

// 小程式端, 呼叫
wx.cloud.callFunction({
    name: 'foo',
    data: { a: 1, b: 2 },
    success: function(res) {
        console.log(res.result)
    }
)

// 雲函式, 宣告
// cloudfunctionRoot/functions/foo/index.js
exports.main = async function(e, ctx) {
    return e.a + e.b
}
複製程式碼

函式名和目錄名對應, 根路徑在project.config.json中定義, 詳細參考官方文件中的"我的第一個雲函式"

8. 雲函式還有什麼特殊能力?

直接獲取使用者的openId

// index.js
exports.main = (event, context) => {
  return event.userInfo
}
複製程式碼

如要獲取使用者頭像 暱稱等資訊, 還是需要在小程式端進行授權才行

9. 雲函式需要我們考慮伺服器運維的工作麼

不需要, 只要開發好上傳就行, 執行環境是獨立 封閉的, 類 CentOS 7 的環境

10. 開發時和線上環境有隔離麼

提供1個生產環境, 和1個開發環境, 儲存和雲函式都是獨立的

這意味著多個開發者並行開發協作可能會有些小麻煩, 同時只能有一套程式碼在開發環境, 這就只能通過一些工作流程約定, 比如收斂上傳許可權, 每日自動部署. 應用類似git-flow的分支策略

11. 雲開發是否提供有定位 地理資訊 支付相關業務的支援

暫時沒有, 這方面的需求還是很強的, 畢竟小程式是提倡線下掃碼, 掃碼後還是期望能夠獲取到附近的相關資訊, 簡單的比如城市 區劃, 詳細的比如商家

小程式雲開發的同學目前還在收集這方面的需求

12. 什麼版本的基礎庫支援雲開發

基礎庫 2.2.3 之後開始支援, 但對於舊版本可以加個配置也能支援

app.json/game.json

{
  "cloud": true
}
複製程式碼

13. 費用呢

目前免費, 正在調研計費策略, 可能是按照呼叫量, 儲存量計費

結語

目前看雲開發基本成型, 典型的業務都能覆蓋到了, 還有一些周邊的東西需要完善

比如資料庫儲存這邊的批量操作, 事務的支援, 儲存容器還可以在增加一些, 比如訊息佇列, 其它的雜項如任務排程, 開發者環境隔離, 資料遷移升級

另一方面, 作為前端工程師, 技術能力邊界的延伸, 並不完全意味著獲益, 還包括背景知識成本, 只有學習好這些, 才能駕馭好新的能力, 比如領域建模, 設計模式, 封裝和隔離.


大家好,我是貓眼娛樂前端技術專家-曹宇,我主要負責貓眼娛樂電影選座交易業務前端, 除了大家能看到的各種 Web 頁面, 還有小程式端和供應鏈端. 同時負責貓眼內部的前端基礎設施, 質量保證相關工作。

貓眼電影小程式從零發展到票務類別第一, 主要關注點都集中線上上, 這次分享的是一個線上 線下聯動的活動, 從開發到上線後遇到的一些有趣的事情, 除了小程式技術的深度應用, 還包括產品 運營層面的思考.

本週六(10月21日)我會做客掘金Bilibili直播間為大家做一場《打碼指南:由貓眼線下掃碼1分購談起》的直播。直播中我們也會送出技術圖書,大號定製滑鼠墊等獎品,歡迎週六下午大家與我們一起交流。

小程式·雲開發初級FAQ

相關文章