一場與超媒體的未了情緣
當我在2007年前初次翻譯Roy Fielding關于REST的博士論文(中文版名為《架構風格與基于網絡應用軟體的架構設計》)時,其實對于Web的整體架構是毫無認識的。無知者無畏,當時我僅僅是出于求知欲就開始了翻譯工作。後來我發現這個挑戰嚴重超出了我的能力範圍,Fielding的博士論文是我翻譯過的專業技術著作中難度最高的。後來我在2013年重新翻譯了REST博士論文,力求把初次翻譯時的大量問題和留下的遺憾都彌補掉,而不至于誤人子弟。
REST博士論文是一座内涵豐富的寶藏,可以說是2000年前Web架構相關論文中的集大成者,其重要性不亞于Tim Berners-Lee爵士的論文。其中系統地闡述了HTTP/1.1協定背後的設計原理——REST。絕大多數不了解REST思想的Web開發者都會陷入兩個誤區之中:一個是将HTTP簡單看作是一種傳輸協定(而不是應用協定),另一個是完全忽視超媒體的重要性。在2005年REST思想随着Web 2.0的興起和迅速發展而逐漸普及之後,脫離第一個誤區的Web開發者越來越多,但是能脫離第二個誤區的Web開發者還是極少數。Fielding博士其實從最初就認為REST和超媒體是不可分割的,而HTTP/1.1最重要的設計目标就是更好地支援超媒體。在當時的語境中,這個超媒體自然就是HTML。因為關于超媒體的誤解如此之多,是以Fielding博士在2008年寫了一篇部落格文章:REST APIs must be hypertext-driven!(REST API必須是超文本驅動的)。
這篇部落格引起了Web開發社群的廣泛讨論和反思,随後RESTful Web Services一書的作者Leonard Richardson提出了一個Richardson成熟度模型。在這個模型中将RESTful API劃分了3個等級,把能夠熟練應用超媒體的RESTful API列為了最高等級——第3級。然而很多年過去了,在普通Web開發者看來,這似乎仍然是一個烏托邦式的目标。有些RPC鐵杆粉絲總是會拿這個來譏諷REST愛好者,把他們說成是中看不中用的API設計美學愛好者。這些傳統的觀點過于強大,以至于REST愛好者對于在API設計中使用超媒體也視為畏途。
當然,我們都是工程派,而不是學院派。随便給别人亂扣學院派的大帽子,是一種不尊重人的行為,也是不求甚解的展現。包括REST思想的創造者Roy Fielding也是一位如假包換的工程派。他早年為很多開源項目貢獻過大量代碼,還指導了大量HTTP用戶端/伺服器端開發團隊,他的實戰能力肯定在絕大多數開發者之上。REST當然并不是一種API設計美學,它更像是中庸之道,包含了設計Web應用的各種架構權衡。雖然Fielding在設計HTTP/1.1和撰寫博士論文時,超媒體主要指的是HTML,但是REST是通用的理論,能支援的超媒體類别遠遠超出了HTML一種。在Fielding發表2008年部落格文章之後,Web開發社群出現了大量新型的超媒體,而且越新出現的超媒體,越是基于JSON而非XML的,與超媒體相關的研究和開發實戰非常活躍。一直很支援REST設計開發的O'Reilly出版社,也不失時機地出版了很多REST開發相關的圖書,這些圖書目前已經形成了一個強大的系列,包括:
- RESTful Web Services
- RESTful Web Services Cookbook
- REST in Practice
- RESTful Web APIs
- RESTful Web Clients
另外還有很多針對某個開發平台的REST開發圖書。
- RESTful .NET
- Building Hypermedia APIs with HTML5 and Node
- PHP Web Services: APIs for the Modern Web
等等
在這些優秀的REST開發圖書之中,涉及到了超媒體的圖書最重要的有三本:
- REST in Practice
- RESTful Web APIs
- RESTful Web Clients
我有幸作為REST in Practice一書的翻譯負責人,趙震一負責翻譯RESTful Web APIs,曾著負責翻譯RESTful Web Clients。我們就像是一個接力賽的團隊一樣,在7年的時間裡,把接力棒傳遞下去,終于通過這3本書,向國内的Web開發者全面展示了RESTful API和超媒體的獨特魅力。
這三本書由淺入深,逐漸揭開了支援超媒體的第三級RESTful API(也就是所謂的“Web API”)的神秘面紗。尤其是第三本書RESTful Web Clients,令人信服地展示了使用超媒體之後,對于API用戶端代碼的複用性和松耦合起到的巨大作用。除此之外這本書最重要的貢獻是讓超媒體變得如此平易近人,要達到這個目标其實是非常困難的。作者Mike Amundsen雖然功力深厚,然而為了保證本書的品質,足足推遲了一年時間才上市。結果不負衆望,Mike為讀者奉獻了一本高品質的圖書。連Roy Fielding在Twitter上也承認Mike Amundsen對于超媒體如何使用的了解,與REST博士論文是最接近的。相信認真閱讀完本書的Web開發者,對在API設計中适當使用超媒體不會再那麼猶豫。其實在API設計中适當使用超媒體,就應該像我們平時寫代碼時要寫單元測試一樣習以為常。并且熟能生巧,不斷探索在API設計中使用超媒體的樂趣。
另外我還建議讀者在讀完RESTful Web Clients之後,再去認真讀一下Mike Amundsen前一本書RESTful Web APIs,因為這兩本書有很強的關聯性。RESTful Web APIs雖然很棒,但是偏重于概念闡述,實戰性不足,RESTful Web Clients彌補了RESTful Web APIs實戰性方面的缺憾。思想的發展是有傳承性的,沒有幾年前的RESTful Web APIs就不會有RESTful Web Clients。對于API來說,伺服器端是皮,用戶端是毛,皮之不存,毛将焉附?
順便說一下,雖然現在HTTP/1.1已經更新到了HTTP/2,不過REST和超媒體的思想是完全适用的。如果熟悉HTTP/2,你會發現,其實HTTP/2的設計還是為了更好地支援超媒體(特别是HTML5),HTTP/2仍然與超媒體是緊密相關的。這再次證明了Fielding在REST博士論文中所闡述的思想,REST是Web自身的架構風格,REST就是一切優秀Web應用的靈魂,而REST自身的靈魂就是超媒體。超媒體是計算機軟體領域最偉大的思想之一,它是Web取之不竭的力量源泉。
開卷有益,最後我代表國内的Web開發者感謝本書的兩位譯者曾著、徐必濤的辛勤工作。也感謝博文視點張春雨老師,他10年來堅持不懈支援REST開發圖書出版。
Web架構師 李锟
2018年3月4日于上海