《Client-Server Web Apps with JavaScript and Java》選讀:什麼是Client-Server Web App?

群峰發表於2014-07-31

電腦科學領域有兩大難題:快取失效和命名。
—Phil Karlton

寫一本關於快取失效的書並不是難事,難的是如何給書取個好名字。誠如書名所示,本書探討了Web開發方方面面的變化,這些變化促成了一種新的設計Web應用方式的誕生。

誠然,Web開發的許多方面都可以稱之為“新”。桌面瀏覽器的升級、層出不窮的移動終端、程式語言的演變、更快的處理器、還有越來越挑剔的使用者以及他們不斷增長的、對易用性和互動性的期望,都讓開發者枕戈待旦。這些改變,使得開發者開發專案時必須持續創新。其中的一些解決方案不是孤立的,它們有更為深遠的含義。

因此,我選擇了"客戶端-伺服器端"這一術語,來概括Web開發在這一創新過程中所發生的變化。時下流行的其他一些對現代化開發實踐的描述不適合我們的研究領域,因此在這裡不予討論。這裡所講的Web應用開發是和桌面瀏覽器相關的,另一個日漸相關的話題:移動引用開發,並不在我們的討論範圍內。

人們使用術語單頁面應用單頁面介面,來區分現代Web應用和早期的靜態網頁。這些術語準確地抓住了現代Web應用的特徵,和早期應用相比,它們更動態、互動性更強。

當然,很多現代的動態網站並不是單頁面應用,它們可能由多個頁面組成。這些術語強調的是頁面——應用的客戶端。對於伺服器端的開發,則未作任何特別宣告。還有與高度動態化的頁面相關的各種JavaScript框架(Angular、Ember和Backbone等),但是這些仍然是客戶端的事。我希望本書包含的內容更廣,不僅限於前端的創新,還應涵蓋伺服器端的相關設計和網路服務資訊傳遞。

這就是流行的REST(Representational State Transfer)技術,它建議了一種網路服務訊息傳遞的風格。但是REST的作者Roy Fielding只給出了有限的定義,在個人部落格中,他列出了自詡為"RESTful APIs",卻常常違反REST風格的幾個錯誤。還有人在StackOverflow上發帖提問“JSON API can be truly RESTful”,因為JSON並不完全滿足REST結構風格的約束。對於REST服務,有一種漸進式的描述,只有當API滿足相應程度上的約束時,才可稱之為RESTful的。REST將客戶端-伺服器端架構作為其約束之一,動詞的使用和URL的命名規範也是。

使用JavaScript客戶端處理實用的“RESTful” API產生的訊息是開發方法中重要的一環,那麼伺服器端的情況是怎麼樣的?

Java企業版(JEE)包含了JAX-RS API,它是一種Java風格的REST(但沒有嚴格遵循REST規範),並使用了Jersey作為一種參考實現予以展示。如果僅限於使用JAX-RS開發Web應用,則會忽略一些現有的框架和其他一些基於JVM的程式語言所提供的解決方案,它們尤其擅長快速搭建原型。

為一本書起一個簡單明瞭、引人入勝的書名並不容易,多虧了James Ward,他在2012年的OSCON大會上發表了一篇題為“Client-Server Web Applications with HTML5 and Java”的演講。在這篇演講中,他列舉了一種正在變得流行的Web應用開發方法的優點,在近些年的一些專案中,我也使用了這種方法開發Web應用。其中,術語“客戶端-伺服器端”是理解這種開發方法的關鍵,它概括了軟體架構的根本性改變,對客戶端和伺服器端做出了明確區分,並將兩者放在了同樣重要的位置上。

Web應用的這種客戶端-伺服器端架構帶來了程式設計師工作方式的轉變(有時候,甚至是天翻地覆的變化)。本書就是為了幫助開發者適應這種革命,特別的,對於如何構建現代Web應用的最新方法也做出了恰當的評價。

目標讀者

本書的目標讀者是那些熟悉Java語言、HTML、JavaScript和CSS的Web應用開發者。它為那些喜歡在實踐中學習,喜歡將新技術整合進標準工具中構建示例應用的讀者量身定製。如果你想了解JavaScript的最新發展,以及和使用Java在開發流程上的異同,那麼就應該閱讀本書。

閱讀本書,需要兩方面之間做出平衡。一方面,讀者從本書中的最大收穫是從巨集觀上掌握技術轉變的影響和趨勢;另一方面,理解技術的最好途徑常常是具體的例子。如果你的興趣在於從巨集觀上掌握各種技術之間是如何融合在一起,那麼定能從本書中受益。

我寫作此書的目的,就是為了幫助讀者做出明智的決定。好的決定可以幫助你在新專案中採用正確的技術,避免了採用不相容的技術造成的陷阱,或者對於給出的決定形成錯誤的期望。它還能幫助你在正開發的專案裡快速上手,更好地支援已有程式碼。簡而言之,明智的決定可以讓程式設計師的生產效率更高,它能讓你在當前,或者是未來工作中研究感興趣的領域時高效地利用時間。

組織結構

第一章概覽了客戶端-伺服器端的Web應用架構,介紹了Web應用開發的歷史,併為Web開發正規化的遷移提供了充足的證據。由此引出了接下來的三章內容,分別描述了開發過程中各種工具的使用。

第二章介紹了JavaScript語言,和使用JavaScript開發時用到的工具。

第三章介紹瞭如何設計Web API、REST以及開發基於HTTP的RESTful應用時用到的工具。

第四章介紹了Java,和本書剩餘章節內容需要用到的軟體。

本書的第二部分在更高的層面上討論了Web應用的架構(比如客戶端類庫和應用伺服器),以及它們如何做到良好的分離,從而方便快速開發。

第五章介紹了主流的客戶端JavaScript框架。

第六章介紹了Java API、伺服器和服務。

第七章介紹了快速開發實踐。

第八章深入討論了API設計。

瞭解了這些類庫和快速開發原型的流程,在接下來的幾章中,就將這些知識應用於具體的專案,我們使用了各種基於JVM的語言和框架。在接下來的兩章中,我們使用了輕量級的Web伺服器和微框架,而沒有采用傳統的Java Web應用所需的打包方式和伺服器。

第九章介紹了一個使用jQuery和Jython的專案。

第十章介紹了一個使用JRuby和Angular的專案。

本書的最後幾章詳細介紹了幾個使用傳統的Java Web應用伺服器和類庫的專案。

第十一章介紹了Java生態系統中現有的Web應用打包方式和部署選項。

第十二章介紹了虛擬化和從管理大規模伺服器環境中湧現出的新技術。

第十三章將焦點放在了測試和文件化上。

第十四章對全書做以總結,並對網際網路相關技術和軟體開發中各種紛繁的變化給出了自己的看法。

附錄A介紹瞭如何方便地與Java類互動。

相關文章