Node.js 入門, #8:認識 JSON 與 Web App 的概念
.作者:jollen/
.日期:July 23, 2014 9:26 PM
本文章採用 Markdown 語法撰寫(why?),若無法閱讀內文,請點擊這裡。
Web-Oriented Architect
Web 導向架構(WOA, Web-Oriented Architect)著重幾個觀念:
- Device-Server 設計模式
- Device 端使用 Browser,以 Browser 做為執行環境(Runtime)
- Server 端提供 APIs,即 PaaS 概念
- Device-Server 採用非同步通訊(Asynchronous communication)
事實上,非同步通訊大家都使用過,就是 AJAX;AJAX 的第一個 A 就是 Asynchronous。但是考量 Server 端的負載(Loading),以及百萬連線(Millions requests)等級的處理能力需求,應該儘量少用 AJAX 機制。這就是 Device-Server 與 Client-Server 的差別,大家可能還不太明白。所以,將二者的差別簡單整理如下:
- Client-Server 做法:在瀏覽器裡(Client)主動向 Server 請求內容,Client 定時(如:每隔5秒鐘)發出請求,持續更新內容。
- Device-Server 做法:在裝置端(Device)和 Server 建立連線,Server 主動將更新內容推送(Push)給裝置端,更明確地說,裝置裡的瀏覽器,瀏覽器再將新內容刷新。
這樣就很清楚了,傳統的 Client-Server 做法是「Data Pull」,即主動去拉資料;Device-Server 的做法是「Data Push」,即推送資料,由 Server 在必要時才將資料推送給 Device。Data Push 的經典代表作就是 BlackBerry(黑莓機)的郵件服務。
為什麼 AJAX 不好用?因為 Server 要冒著「不知道有多少 Client、不知道同時有多少 Requests」的風險,會增加 Load Balancer 佈署的成本;另外,當然就是即時性的問題(Live Streamming)。要達成 Data Push 的目的,有解決二個技術問題:
- Device 端要與 Server 建立永續性(Persistent)連線,也就是 Socket Connection
- Server 推送出去的資料,格式要有統一標準,且輕量化
要解決這二個問題,要使用到二項技術:WebSocket 與 JSON。從以上的說明,可以大略了解 HTML5 的威力在於「Web App」的應用領域,而不只是 Web Page 的製作:
-
從 Web Page 角度來看,以 Client-Server 為主,這像是傳統 PC 時代的使用案例 從 Web App 角度來看,將 Device-Server 為主
-
Web App 的開發思惟,與 Web Page 有很大的不同。目前 Web App 的 UI 製作,採是強調跨螢幕與裝置的特性,這種設計稱為 Responsive Design。並且,Responsive Design 進向以行動裝置為預設值的做法,也就是「Mobie First」
Web App 技術
從 Web App 的角度看 HTML5,以下是初學者可考慮優先切入學習的技術:
-
PhoneGap:Device API 的標準,使用 JavaScript 呼叫 Device API 的好技術,Nitobi 公司是 PhoneGap 的開發商,這家公司現已被 Adobe Systems 收購
-
WebSocket:HTML5 標準裡的一個技術
-
Node.js:開發專用 Web Service 的技術,採用 JavaScript 語言
Apache Web Server 是通用型的 Web Server,主要提供頁面(Pages)服務。Node.js 則是 Web Service 的技術,用來開發專用的 Web Service APIs。
現在開發專用的 Web Service 非常重要,這是 PaaS 的靈魂。例如,開發股票報價專用 Web Server。過去常聽到的 Web Server,例如:Apache,都是一般用途的 Web Server,用來「host Web pages」。
現在 Client 端的網頁是用 JavaScript,Server 端的開發也可以用 JavaScript,Client/Server 通通都用 JavaScript,這是一個「All in JavaScript」的時代。
重要的資訊交換格式:JSON
傳統 Backend 的做法,會提供 Client 端一份 HTML5 的片斷文件,而不是格式化後的資料(Formatted),這是一個缺點。
如果 Server 回傳的是格式化後的資料,Client 端就可以更有效率地利用這些資料。試想,如果 Google 傳回的搜尋結果是一堆 HTML5,那我們不就還要再去 Parse 這份文件,才能取出真正的結果,然後才能再次利用這些資料(例如:再儲存為 CVS 格式)。
為了解決這個問題,必須要有一個標準,不能大家都用自已的 HTML5 文件,或是自定的格式。軟體工程師設計了一些標準。一開始提出的做法,是制定標準的XML標籤,這樣大家就可以統一文件格式了。但是還有一個問題,就是「資料量太大」。
試想,Server 要回傳二筆資料,這二筆資料都是電話號碼:
- 0911-111-111
- 0900-000-000
然後用XML來表示,就變成:
<Telephone>
<Item>0911-111-111</Item>
<Item>0900-000-000</Item>
</Telephone>
這種把資料打腫了才回傳的做法,大大浪費網路頻寬。上面只是一個簡單的例子,現實環境,要回傳的資料可能是一個 10MB 的 XML 文件,結果原始資料可能只有 1MB。
要解決這個問題,就要有一個輕量級(Light-weight)的資料交換格式,這項技術就是 JSON。所以,JSON 是 Client/Server 交換資料的一種格式,一種 Light-weight data exchange 技術。
Tags: