本文接上篇未完文章,深圳APP開(kāi)發(fā)公司希望通過(guò)此類(lèi)文章給需要或者計(jì)劃開(kāi)發(fā)APP的廣大客戶(hù)一個(gè)理解APP的制作流程。
一、APP開(kāi)發(fā)后端是返回給API的數(shù)據(jù)格式
API一般是以HTTP的形式調(diào)用的,通過(guò)HTTP傳入?yún)?shù)返回?cái)?shù)據(jù)。那么,App后臺(tái)以什么樣的格式返回?cái)?shù)據(jù)呢?JSON(JavaScriptObjectNotation)是一種輕量級(jí)的數(shù)據(jù)交換格式。JSON采用完全獨(dú)立于語(yǔ)言的文本格式,但是也使用了類(lèi)似于C語(yǔ)言家族的習(xí)慣(包括C、C++、C#、Java、JavaScript、Perl、Python等),這些特性使JSON成為理想的數(shù)據(jù)交換語(yǔ)言。同時(shí)JSON易于閱讀和編寫(xiě),也易于機(jī)器解析和生成。下面是一個(gè)JSON格式的例子:{"age":11,"name":"jeff"}另外一種常見(jiàn)的數(shù)據(jù)格式XML,其用來(lái)標(biāo)記數(shù)據(jù)、定義數(shù)據(jù)類(lèi)型,是一種允許用戶(hù)對(duì)自己的標(biāo)記語(yǔ)言進(jìn)行定義的源語(yǔ)言。它非常適合萬(wàn)維網(wǎng)傳輸,提供統(tǒng)一的方法來(lái)描述和交換獨(dú)立于應(yīng)用程序或供應(yīng)商的結(jié)構(gòu)化數(shù)據(jù)。下面是一個(gè)XML格式的例子:<?xmlversion="1.0"encoding="UTF-8"?><name>jeff<name><age>11<age>讀者比較一下上面舉例的XML格式和JSON格式的數(shù)據(jù),表示相同的數(shù)據(jù)內(nèi)容,XML格式比JSON格式需要花費(fèi)更多的字節(jié)。從上面的對(duì)比很容易看出,JSON格式更省流量,所以現(xiàn)在大多數(shù)API(例如新浪微博的開(kāi)放API)都是以JSON作為返回?cái)?shù)據(jù)的格式。App和App后臺(tái)的通信過(guò)程如圖
所示。
二、App后臺(tái)和Web后端的區(qū)別很多從Web后端轉(zhuǎn)到App后臺(tái)的讀者經(jīng)常很茫然,不知道這兩者之間有什么區(qū)別。深圳APP開(kāi)發(fā)公司通過(guò)例子,分析Web后端和App后臺(tái)的區(qū)別,使讀者能更好地把握App后臺(tái)的架構(gòu)。
1.App后臺(tái)要慎重考慮網(wǎng)絡(luò)傳輸?shù)牧髁?,主要在API設(shè)計(jì)、圖片處理上現(xiàn)階段手機(jī)上網(wǎng)的資費(fèi)還是要按照流量算的,一般的3G用戶(hù),每個(gè)月的流量幾百M(fèi)B,4G用戶(hù),每個(gè)月的流量也只有幾GB。如果不考慮網(wǎng)絡(luò)傳輸?shù)牧髁浚粡垐D片就占了幾百KB的空間,流量用得飛快。在前面的文章“1.3App和App后臺(tái)的通信”中提到,API的返回結(jié)果一般是JSON格式,使用JSON格式的一個(gè)重要原因是,同樣的內(nèi)容,用JSON格式更省流量。App下載的圖片也一樣,一個(gè)節(jié)省流量的處理方法是讓App下載經(jīng)過(guò)壓縮的圖片(一般是幾十KB以下),當(dāng)用戶(hù)需要查看原圖時(shí)才下載原圖。
2.移動(dòng)手機(jī)弱網(wǎng)絡(luò)環(huán)境移動(dòng)手機(jī)因?yàn)椴粩嘁苿?dòng)的特性,特別是在高速移動(dòng)的過(guò)程中,信號(hào)時(shí)有時(shí)無(wú)。因此App后臺(tái)發(fā)給App的信息是無(wú)法保證一定到達(dá)App的,極有可能的情況是:當(dāng)App后臺(tái)發(fā)送信息的時(shí)候App是連接網(wǎng)絡(luò)的,但發(fā)送的過(guò)程中網(wǎng)絡(luò)斷開(kāi)了,這樣App就無(wú)法收到消息。例如,推送系統(tǒng)中App要保存接收到的消息編號(hào)。服務(wù)端發(fā)送了編號(hào)為1、2、3這3條推送消息給App,App接收消息的過(guò)程中網(wǎng)絡(luò)斷開(kāi)了,App端只收到消息編號(hào)為1、2的消息,這意味著編號(hào)為3的消息丟失了,但是推送服務(wù)器是認(rèn)為編號(hào)為3的消息已經(jīng)推送成功了。
3.手機(jī)電量有限普通的手機(jī)電池被充滿(mǎn)后能用一天左右,如果在App端做大量的網(wǎng)絡(luò)請(qǐng)求和運(yùn)算,手機(jī)的電量將消耗得很快。但如果把所有的運(yùn)算都集中在App后臺(tái),也會(huì)增加App后臺(tái)的負(fù)擔(dān),嚴(yán)重的話(huà)會(huì)造成服務(wù)器宕機(jī)。這兩者之間的平衡,需要研發(fā)人員在項(xiàng)目中仔細(xì)斟酌。
三、選擇服務(wù)器對(duì)于很多剛?cè)胄械呐笥褋?lái)說(shuō),不清楚應(yīng)該選擇什么樣的服務(wù)器提供商,是選擇傳統(tǒng)的IDC,還是選擇現(xiàn)在熱門(mén)的云服務(wù)器呢?在本書(shū)中,筆者通過(guò)對(duì)比傳統(tǒng)的IDC和云服務(wù),簡(jiǎn)單闡述一下選擇服務(wù)器的問(wèn)題。
1.是選擇傳統(tǒng)的IDC還是云服務(wù)器App產(chǎn)品經(jīng)常會(huì)出現(xiàn)在毫無(wú)征兆的App訪(fǎng)問(wèn)量爆發(fā)的情況。如果出現(xiàn)了App訪(fǎng)問(wèn)量爆發(fā)的情況,解決訪(fǎng)問(wèn)的壓力最快、最有效的方法是升級(jí)服務(wù)器的硬件,如升級(jí)CPU,升級(jí)內(nèi)存容量或者升級(jí)帶寬。傳統(tǒng)的IDC要升級(jí)CPU或升級(jí)內(nèi)存容量的流程如下。和客戶(hù)經(jīng)理商談所需硬件的價(jià)格或在線(xiàn)選擇具體的配置。在線(xiàn)支付或銀行轉(zhuǎn)賬。確認(rèn)錢(qián)到賬后,等待IDC安排工作人員升級(jí)硬件。在這個(gè)流程中由于需要人工的介入,很難做到幾分鐘內(nèi)完成升級(jí)硬件。使用云服務(wù)器升級(jí)硬件就很簡(jiǎn)單,流程如下。在用戶(hù)后臺(tái)選擇升級(jí)后的硬件配置。通過(guò)網(wǎng)絡(luò)支付。重啟服務(wù)器,升級(jí)就完成了。如果只是升級(jí)帶寬,甚至不用重啟服務(wù)器。整個(gè)過(guò)程算起來(lái)不用5分鐘,簡(jiǎn)單、快捷、方便。而且現(xiàn)在的云服務(wù)提供商除了提供服務(wù)器外,還提供下面這些服務(wù)。負(fù)載均衡。云數(shù)據(jù)庫(kù)。云內(nèi)存存儲(chǔ)。App上線(xiàn)初期,一般開(kāi)發(fā)者都在一臺(tái)服務(wù)器上搭建所有的服務(wù),但隨著App的發(fā)展,這些服務(wù)需要部署在不同的服務(wù)器上。隨著業(yè)務(wù)規(guī)模的增大,需要面對(duì)高可用、高并發(fā)、監(jiān)控報(bào)警等問(wèn)題。如果這些運(yùn)維問(wèn)題都要研發(fā)人員自行解決的話(huà),那在成本投入上非常大,因?yàn)橐话愕膭?chuàng)業(yè)公司中研發(fā)人員就一兩個(gè)人,既要保證平時(shí)的開(kāi)發(fā)任務(wù),又要做復(fù)雜的運(yùn)維管理,實(shí)現(xiàn)起來(lái)很困難。而且研發(fā)人員也不是全能的,對(duì)于沒(méi)用過(guò)的專(zhuān)業(yè)運(yùn)維知識(shí)也需要一定的學(xué)習(xí)成本,就算研發(fā)人員學(xué)會(huì)了,真正部署實(shí)施效果怎么樣還很難保證。在這些情況下就能體會(huì)到云服務(wù)的優(yōu)點(diǎn),由云服務(wù)器的提供商來(lái)負(fù)責(zé)運(yùn)維,高可用、高并發(fā)、監(jiān)控報(bào)警等方面都能靠云服務(wù)器提供商保障,企業(yè)使用云服務(wù)就能大大減輕運(yùn)維方面的壓力和研發(fā)的成本。
2.深圳APP開(kāi)發(fā)公司建議
筆者在網(wǎng)絡(luò)上經(jīng)常被問(wèn):需要選擇什么樣的服務(wù)器配置?這個(gè)問(wèn)題我們沒(méi)法回答,因?yàn)樾枰C合考慮用戶(hù)量、業(yè)務(wù)邏輯等因素。不過(guò)筆者建議項(xiàng)目初期的硬件配置可以稍為遜色點(diǎn),隨時(shí)監(jiān)控主機(jī)資源的狀態(tài),當(dāng)預(yù)估當(dāng)前的配置不能應(yīng)付業(yè)務(wù)上的需求時(shí)就考慮升級(jí)硬件,畢竟現(xiàn)在升級(jí)或者購(gòu)買(mǎi)云服務(wù)器都非常方便。深圳APP開(kāi)發(fā)博納網(wǎng)絡(luò)編輯整理。全文未完,敬請(qǐng)繼續(xù)關(guān)注。