我今天的分享并不會重點介紹基于小程式·雲開發大家可以怎麼做小程式的開發。而是跟大家分享從一個産品的角度我們為什麼會做這個事情,為什麼小程式·雲開發會呈現出現在這樣的産品形态,以及未來我們可能在現有能力的基礎上怎麼做進一步擴充。
首先我們回到源頭思考一個問題小程式雲開發是什麼,為了回答這個問題,我們先來看下如果我們要開發一個小程式,需要做些什麼。
傳統的小程式開發模式

在一個傳統的小程式開發模式中,我們要做用戶端開發,做服務端開發,在小程式一上線的時候我們就做了微信開發者工具,基于微信開發者工具,開發者可以完成用戶端代碼的開發、測試、上傳和部署。。再看一下服務端,當然最重要的是寫業務邏輯,除了業務邏輯還要購買伺服器,購買域名,還要配置監控報警,甚至還要做一些網絡優化相關的東西。這裡我就不一個個展開去講過了,我們抽其中一件事來看看具體需要做些什麼。比如,域名備案,我們要驗證備案資訊、送出申請,通管局的稽核,這個過程要20天。
而這隻是域名備案這一件事所需要的時長。我們發現就服務端開發而言,開發者需要耗費大量的時間在和業務邏輯開發無關的事情上。于是,我們開始想,官方能不能做一些事情,能讓開發者把更多的精力放在業務邏輯的實踐上面而不是做其他的事情,這就是我們做小程式雲開發的初衷。
那麼小程式雲開發是什麼?
我們認為他應該是一種高效的小程式服務端開發模式,當我們立下這個目标的時候我們産生了另外一個思考。作為一種後端服務你應該具備什麼樣的能力?作為一個還稍微算合格的産品經理我理了一下我們的需求,對應的想了一下我們的解決方案。
小程式後端服務具備的能力
服務端的開發一定是需要資源,要購買伺服器,要購買域名,還要做環境配置。在現有的技術方案中如何能快速地擷取這些資源呢?
其實答案就是雲服務。
接着我們看有了這些資源要做什麼?
我們要做代碼的開發測試,要做代碼的送出和線上部署,甚至還要做一大堆的運維操作,要設定監控、報警等等。我要怎麼把這些操作結合起來呢?因為最開始我們講到在小程式剛推出的時候已經推出微信開發者工具,我們希望大家的操作是可以在一個工具裡完成的,可以在工具裡不僅做用戶端開發還可以做服務端開發。
在我們的業務開發中還會面臨一個問題就是權限。既然它是小程式的後端服務能力,它應該和小程式現有服務使用統一的鑒權,我們需要跟小程式的權限體系打通。有了這些思考和想法我們就有一個大概的雛形,這時候涉及到另外一個關鍵的問題,你有能力應該怎麼用?我們思考了很久,也想了好幾套方案。比如說我們可以什麼都不用做,隻是把資源提供給使用者,讓給開發者自由發揮。當然我們還可以進一步去做,我們可以用授權的方式打通小程式端到雲服務之間權限的管理,即使做了這樣的一個授權,我們發現在使用者的使用看來,整個操作流程還是繁瑣的,還是有必要的操作是需要完成的,這些跟業務邏輯的實作無關的。
經過大概一年多的探索我們最終産生了這樣的想法,我們覺得小程式後端服務的使用就應該像我們調用一個api那樣簡單,他應該是小程式的一項基礎能力,像我們的插件、元件一樣你用或者不用他都在那裡等着大家。
有了以上所有的想法,接着我們就做了小程式開發雲這件事情,我們提供了三大基礎能力,基于這三大基礎能力,開發者就可以完整的疊代出一個小程式的後端服務。
小程式雲開發
我們有什麼?我們有資料庫,我們的資料是一種文檔型資料庫,開發者可以自由的組織自己的資料結構。。我們還有什麼?我們還有存儲服務。通過存儲服務,可以進行檔案的上傳和下載下傳。同時,我們為每個存儲綁定了cdn,利用内容分發網絡的優勢來優化檔案下載下傳體驗。
接着我們還有雲函數,這就是有非常抽象的概念了,因為我跟大家解釋很久大家才知道雲函數是什麼。所謂雲函數就是雲端運作的一串代碼。在這裡你隻需要關心自己業務邏輯的代碼怎麼去寫,通過一個簡單的操作就可以把代碼上傳部署到雲端。同時,在雲函數中,開發者可以通過wx-server-sdk中各類接口的調用友善的操作操作資料庫和存儲資源。
現在,基于小程式·雲開發,大家可以開發小程式、小遊戲和插件。未來我們還會進一步拓展小程式·雲開發的應用場景,讓它惠及到更多的開發者。
上面介紹了我們的能力,接下來看我們怎麼用。
我們并不希望大家的操作是隔離的。,就是我在開發者工具裡做了一件事,然後我跳到另外一個地方做另外一件事。大家隻要登入了微信開發者工具點選雲開發就可以完成整個資源的開通,然後在我們的雲控制台裡你可以對上述所說的三種資源進行管理,然後回到我們的開發者工具一個簡單地配置就可以寫你的代碼,然後再将代碼進行送出,整個過程非常便捷,如果大家有興趣可以試一試。
那麼小程式·雲開發到底解決了什麼問題,以及他的優勢是什麼?
這裡我用了一個卡通的對話來跟大家分享下。有一天一個菜鳥工程師走到一個大神的面前說,大佬大佬我想做一個小程式,我該做什麼呢?在沒有雲開發的時候你要做什麼,大神隻能畫圖來告訴你了,說你可能需要小程式的前端服務,你需要後端服務,在搭建後端服務的時候你需要購買很多的資源并進行各種配置和運維操作。
終于到了寫代碼邏輯的時候,你還要維護一套複雜的鑒權體系。因為當使用者自主去搭建伺服器的時候,你的鑒權是要通過小程式的用戶端到開發者自己部署的server端再到我們微信的server端來完成整個鑒權。可是自從有了雲開發我就不需要再做那麼多事情了,一鍵開通你就具備最基礎的小程式後端的疊代能力了,同時,鑒權也會變的非常簡單,我們在雲函數通過sdk利用一個接口可以擷取整個調用的上下文,包括了appid、openid等。開發者無需維護複雜的鑒權機制,即可獲得 天然可信任的使用者登入态。剩下的時間大家可以很開心地寫自己的代碼。
最後,想跟大家分享下未來我們還将提供哪些能力。
從9月11日上線至今,我們收到了很多的使用者回報。比如說,現在控制台上的一些操作還不夠完善,後續的疊代計劃中,我們也将進一步去完善整個控制台的設計。還有一些使用者表示,希望我們能夠提供給一些接口,可以将雲開發和自己現有服務打通。我們把這個需求進行抽象會發現這其實是雲開發的開發能力。而開放能力也是我們後續會進一步疊代的功能。
我們再看能力的拓展,後續我們會不斷的拓展小程式·雲開發的接口能力,讓大家可以在雲函數中友善的調用各類微信的原生接口。還有很多的使用者也有提到,現在我們提供了基礎版本,你們有沒有其他的版本可以提供給我們呢?我們把這個需求也抽象出來是認為大家需要我們提供更多的資源模式,讓它能夠滿足不同類型小程式的使用需求。而這也是我們正在規劃中的功能。
以上就是我今天簡單地一個分享,我們的目的非常簡單,我們希望用戶端開發能力是簡單的,服務端開發也是簡單的,讓更多的開發者進入到小程式開發的生态中,讓大家發揮自己的創意,去創造更多小程式。
q&a
q:我現在想在我的公衆号裡面加上小程式的子產品。
a:你希望你在你的公衆号裡加一個入口跳轉到小程式裡面對不對?你想要實作的功能是公衆号跳轉小程式,還是這個小程式的開發?
q:小程式的開發。
a:那完全可以使用我們現在提供的功能進行開發。
q:你好我想問一下,我自己本身也在做小程式開發,我想說如果前期有一個idea想用雲開發快速實作它,後期我想把它轉化到自己的資料庫裡,資料庫在潛入到(msk)再用到自己的服務來怎麼操作?
a:這就是能力拓展的問題,我們收到使用者回報比如說我現在用雲開發,以後我想把這些資料拿到其他地方用,或者用雲開發現在提供的能力去調用其他的服務,這都是後續開放能力所涵蓋的内容。