?

基于Webpy+Apache HTTP Server 微信小程序架構搭建研究

2018-01-29 12:35陳琦
無線互聯科技 2017年18期
關鍵詞:微信小程序

陳琦

摘要:微信小程序依托擁有巨大用戶群的微信,極有可能成為繼微信公眾號之后又一個亮點,其特點為輕量、用戶友好,文章通過使用微信小程序開發平臺、Webpy+ApacheHTTPServer,介紹一種開發微信小程序的輕量級架構以及設計思路,以供開

發者參考。

關鍵詞:微信小程序;Webpy;Apache HTTPServer;架構搭建

2016年9月2舊,微信小程序正式開啟內測。2017年1月9日0點,微信第一批小程序正式上線,用戶可以體驗到各種各樣小程序提供的服務[1]。2017年第一季度,騰訊公布的微信月活躍賬戶數達到9.38億,比去年同期增長23%[2]。在一個相對巨大的用戶群體上微信依然保持高速增長,其生命力非同一般。作為一種新興事物,微信小程序依托擁有巨大用戶群的微信,極有可能成為繼微信公眾號之后的又一個亮點。

微信小程序有別于普通APP最顯著的一點是不用下載和安裝,通過搜索或掃碼即可進入小程序,那么這就要求小程序要盡量做到輕量級;微信小程序有別于微信公眾號內應用的最顯著特點是,小程序更接近于原生APP應用,而公眾號應用就是網頁Web程序,因此小程序在用戶友好性上更勝一籌。

小程序,顧名思義,相對于一般APP而言體量較小,那么對于開發者而言一個快速而輕量級的開發架構就成了開發微信小程序的首選,本文介紹一種快速開發的架構及設計思路,以供參考。

1架構中主要框架的選擇及介紹

在架構中,客戶端框架(也稱為前端框架)、服務器端框架(也稱為后端框架)、以及服務器中間件的選擇是關鍵,下面從這3個方面進行相應介紹。

1.1微信小程序前端框架

小程序前端開發框架是騰訊官方提供的小程序開發框架,要想讓小程序可以在微信上使用,該前端框架為必選項。

該框架提供了自己的視圖層描述標簽語言(WeiXmMarkupLanguage)WXML和樣式語言(WeiXmStyleSheets,WXSS)以及基于JavaScript的邏輯層框架,并在視圖層與邏輯層間提供了數據傳輸和事件系統,讓開發者可以方便地聚焦于數據與邏輯上[3]。其中WXML是一種類似于Web開發中HTML的XML語言,用于組織頁面結構;WXSS是一種近似于Web開發中CSS的樣式表用于表述WXML的顯示方式;其邏輯層使用JavaScript語言和Web開發中一致;其數據層可以認為集成于邏輯層的JavaSmpt中,每一個程序頁面都有一個Page.data用于存放相關頁面需要使用的數據。在使用過程中可以發現,雖然與Web開發中一樣都是用JavaScript,但是兩者之間也存在一定差異,例如:在Web開發中修改頁面上數據,需要先找到HTML上的對應節點然后修改節點上的數據,而小程序中采取的方式是在WXML的節點上直接使用雙括號綁定Page.data中的數據(形如{{some_data}}),修改Page.data中的數據時,頁面顯示內容實時變換。

1.2月良務器端開發框架:Webpy

微信小程序前端框架與后端服務器交互的協議主要使用安全超文本傳輸協議服務器(HyperTextTransportProtocolServer,HTTPS),而且前后端數據傳輸時主要使用JS0N,與Web開發中類似,那么可以選取的服務器端框架就有很多。JAVA,PHP,C#,Ruby,Python等很多開發語言都有相當成熟的Web開發框架,在眾多框架中選擇合適的框架并不簡單,本文選擇Webpy作為后端框架主要基于以下幾點考量。

1.2.1足夠輕量

Webpy是一個非常輕量且功能齊全的PythonWeb框架,最新版本0.38的源文件大小僅為1.1MB,而且Python屬于Linux服務器原生支持語言,這樣一個框架部署在Linux服務器上時,對服務器壓力相對較小。

1.2.2可以很容易地讓頁面模板和后臺服務器端程序解耦由于微信小程序的前端必須使用騰訊自己本身的框架,那么開發小程序的服務器端框架必然要求其模板語言相對獨立,那么類似于PHP,ASP,JSP等技術就不利于小程序的開發,而Webpy的頁面模板就相對獨立,可以輕松地和服務器端解耦。

1.2.3夠靈活

由于存在微信自身服務器和小程序服務器相互溝通的場景,以及考慮到小程序才剛剛起步,以后出現調整在所難免,那么一個相對靈活的后端框架,用于應付各種不同變化和需求就很必要。在這一點上,Webpy的核心路由表非常容易維護,便于修改,可以適用于各種場景。

1.3服務器中間件:ApacheHTTPServer

ApacheHTTPServer(簡稱Apache)是Apache軟件基

金會的一個開放源碼的網頁服務器,可以在大多數計算機操作系統中運行,由于其多平臺和安全性被廣泛使用,是當前世界使用排名第一的Web服務器軟件。其快速、可靠并且是一個模塊化的服務器,可通過簡單的API擴展,將Perl/Python等解釋器編譯到服務器中,可以運行在幾乎所有廣泛使用的計算機平臺上,受到廣泛認可[4]。

ApacheHTTPServer作為一款優良的Web服務器,其靈活性、穩定性均滿足作為微信小程序后端服務器的需要,同時只需添加VntualHost(虛擬機)監聽443端口,配置SSL相應設置,即可滿足微信小程序使用HTTPS服務傳輸的需要。再者,由于后端框架選擇了Webpy,ApacheHTTPServer對于Python語言的友好型,也成了被選擇的原因之一。

2主要技術難點剖析

2.1服務器端與客戶端資源分配的設計思路

對于擁有客戶端和服務器端的程序來說,到底是重客戶端(業務邏輯多在客戶端進行處理)還是重服務器端(業務邏輯多在服務器端進行處理),都需要提前確定。按照常規瀏覽器/服務器(Browser/Server,B/S)架構的程序,一般是重服務器端,而客戶端程序/服務器(CUent/Server,C/S)架構的程序一般是重客戶端或者兩者并重。而目前微信小程序,按照對“小程序”字面的含義,應當屬于C/S架構,但其使用的技術,卻大量參照了B/S架構Web開發的內容,例如:WXML參照HTML,WXSS參照CSS,JavaScript與Web開發幾乎一樣用于頁面邏輯層的編寫。經過一段時間的研究,本文認為微信小程序應當參照C/S架構程序的思路進行編寫,原因如下:endprint

(1)微信小程序區別于微信公眾號應用的最大特點就是其客戶端友好性,如果采取輕客戶端、重服務端的做法無疑會使小程序的優勢被同樣是新近興起的H5開發所完全取代;

(2)微信小程序運行時以微信APP為依托,而微信在全球眾多用戶的手機上均表現良好,因此可以推斷重客戶端的微信小程序不會對用戶使用的設備造成過大壓力;

(3)重客戶端的做法可以減少網絡傳輸的次數,讓使用無線網絡的移動用戶更少感覺到網絡延時造成的卡頓。

由此本文給出開發微信小程序時一些建議:

(1)編寫微信小程序時應當將業務邏輯寫在客戶端,服務器端重點作為存儲數據、組織數據的數據層服務器;

(2)在進入微信小程序時,應當在加載時盡可能多地加載服務器端提供的JSON數據,以便在后續操作中無需二次加載,減少網絡延時對用戶造成的影響;

(3)在小程序操作過程中,僅在用戶完成操作甚至退出小程序時,向服務器端提交同步數據,其他情況均在小程序的內存中處理數據,進一步減少小程序操作的響應時間。

2.2微信小程序與服務器間的交互認證

在使用微信小程序時,用戶的身份認證是一個與其他程序開發很不同的地方,原因在于這里涉及了微信自己的服務器與小程序服務器端的交互。完成微信小程序身份認證的方式如下:(1)小程序調用wx.login()接口獲取微信用戶的code,并將code發送至小程序服務器;(2)小程序服務器將code與小程序唯一標示appid以及小程序秘鑰AppSecret發送給微信服務器;(3)微信服務器根據獲得數據將用戶的唯一標識opemd發送給小程序服務器;(4)微信小程序服務器根據openid生成Session會話,并將Session發送給小程序客戶端,此后小程序的客戶端與服務器端的交互均以該會話進行。

2.3Webpy與ApacheHTTPServer之間的整合

Webpy與ApacheHTTPServer之間的整合可以通過ApacheHTTPServer的WSGI模塊mod_wsgi進行。

在ApacheHTTPServer的配置文件HTTPd中添加語句:

(1)LoadModulewsgi_modulemodules/mod_wsgi.so#加載wsgi模塊;

(2)WSGIScriptAlias/appname/var/www/Webpy-app/code.py/#為程序入口起別名。

其中code.py文件為Webpy的入口文件。

同時修改Webpy的code.py文件在文件最后添加如下語句即可:

application=Web.application(urls,globals()).wsgifunc()。

3結語

通過對微信小程序的研究及測試,本文提出了一種可以用于快速開發微信小程序的架構,并解決了架構中的技術難點,提供了相關開發思路,為想要進行微信小程序開發的技術人員提供了一定的參考。

[參考文獻]

[1]百度百科.微信小程序[EB/OL].(2017-07-11)[2017-09-25].HTTPs://baike.baidu.com/item/-

[2]騰訊.騰訊公布2017年第一季度業績[EB/OL].(2017-05-17)[2017-09-25].HTTPs://www.tencent.com/zh-cn/articles/8003431495014482.pdf.

[3]騰訊.微信公眾平臺-小程序-開發-框架[EB/OL].(2016-09-21)[2017-09-25].HTTPs://mp.weixin.qq.com/debug八vxadoc/dev/framework/MINA.html.

[4]百度百科.apache(Web服務器)[EB/OL].(2015-09-16)[2017-09-25].HTTPs://baike.baidu_com/item/apache/6265.endprint

猜你喜歡
微信小程序
當圖書館遇上微信小程序
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合