nginx php Firefox java Ubuntu shell apache 云计算 微软 Python mysql linux google wordpress 编程 开源 Windows 程序员 centos Android

有關REST知識的閱讀清單

為 Web 設計、實現和維護 API 不僅僅是一項挑戰;對很多公司來說,這是一項勢在必行的任務。本系列 將帶領讀者走過一段旅程,從為 API 確定業務用例到設計方法論,解決實現難題,並從長遠的角度看待在 Web 上維護公共 API。沿途將會有對有影響力的人物的訪談,甚至還有 API 及相關主題的推薦閱讀清單。

經常有人問我,對於那些有誌於學習 Web API 的設計、實現與維護的同行,有沒有什麽推薦的書籍?以下的這份清單中所列舉的書籍,可以讓讀者們在最少量的閱讀中學習到大量的相關主題。這些書籍也是我在 學習 API 的過程中所發現的,並且其中的許多本還在書架上等我翻閱。書架上的書籍也是我在進行顧問的過程中最常參考的。

我在這裏列舉了兩份讀書清單(主要與次要)。第一份清單中的書籍直接對 HTTP、API、REST 及超媒體等技術的工作方式進行了描述。這份清單當然並不能涵蓋描述了這些主題的全部書籍,但它們都是我在工作中最常使用作為參考的一部分。

第二份清單中的書籍雖然並沒有直接涉及 API 的主題,但它們對於我在進行 Web 方面的設計與實現的思維方式起到了直接的影響。我已經盡力將這份清單進行簡化了,雖然依然有許多書籍是我想介紹的給大家的,但我還是打算把它們放在下一次再為大家推薦。

最後,我在文章中加入了“其它資源”這一節。這些資源是我認為經受了時間的考驗而仍然極為有用的,它們也不完全是以書籍的形式發布的。這些資源 中的多數是博客中的文章,以及經過校對的論文等等,其中涵蓋的主題或許是某個棘手的問題,或是對某些常見的實踐及理論背後的概念進行論述。我經常會對這些 部分保存書簽,以便在需要時隨手進行翻閱。

主要書籍清單

《RESTful Web Services》(2008),作者 Richardson 及 Ruby

這是一本論述本質性的書籍。這本書籍是屬於最早對 HTTP API 的新增-獲取-更新-刪除(CRUD)風格進行描述的一批書籍之一,這一風格直到今日依然是在創建“RESTful”風格的 API 時最常用的方式。本書的編寫風格非常優秀、內容也相當出眾。尤其令人稱道的是,作者 Leonard Richardson 及出版商O’Reilly Media 以 Creative Commons 許可的方式將本書以多種電子書形式進行免費發布。你絕對應該保留一份以作為參考。

《HTTP 開發者參考手冊》(HTTP Developer’s Handbook)(2003),作者 Chris Shiflet

在我看來,這本書是一本學習 HTTP 協議、以及使用 HTTP 進行編程的絕佳的指南及參考。即使在現在,在我遇到一些 HTTP 的特殊問題及極端情況時,我還是會參考本書的內容。這本書的編寫及組織形式都很不錯,是我難以割舍的好書。

《RESTful Web Services 參考》(RESTful Web Services Cookbook)(2010),作者 Subbu Allamarju

這本書籍中包含了在應對現實世界中所遇到的 HTTP API 的問題時,一些非常有用且清晰的秘方。書中涵蓋了設計 URI、加載,以及處理狀態碼等常見的內容,但我最欣賞的部分是關於支持異步操作、超長查詢字符串,以及 Allamaraju 稱為“HTTP 控制器”等方面的秘技。我手頭上的這本書已經是我所購買的第二本,但現在也已經被我翻得破破爛爛了。

《REST 實踐》(REST in Practice)(2010),作者 Webber、Parastatidis 及 Robinson

這本書的特色是它對於企業級應用的專註,也是最早介紹如何在商業應用程序中使用超媒體的書籍之一。書中所描述的“REST 巴克(RESTBucks)”咖啡店的示例廣受好評。書中的示例包含了使用 C# 及 JAVA 進行實現的代碼,它不僅對於企業級軟件的開發者非常有用,對於有興趣了解如何從頭開始設計一個包含了完整功能的應用的讀者來說也具有參考價值。

《使用 HTML5 及 Node 創建超媒體 API》(Building Hypermedia APIs with HTML5 and Node)(2011),作者 Amundsen

我編寫此書的目的,是為了探索 Fielding 定義的 REST 架構中所提到的某個主題,那就是“超媒體即應用程序狀態引擎(HATEOAS)”這部分內容的細節。這本書非常簡短,涵蓋了一些在 XML、JSON 及 HTML 中設計超媒體的示例。讀者對我的這本書有許多下面的評價,並且經常會在互聯網上、以及客戶的內部材料中發現對這本書及其示例的引用。

《REST API 設計規則》(REST API Design Rule Book)(2011),作者 Mark Masse

這本書在 CRUD 風格 API 的設計模式方面是一本很好的書籍。它首先涵蓋了一些基礎內容,例如對單數、復數及操作進行 URI 的設計,此外還對 HTTP 方法、頭、狀態碼等特性的規格說明進行了深入的描述。在我看來,這本書的內容似乎對於 Masse 自己定義的 WRML 格式進行了過多的依賴,不過這只是我個人的意見。

《RESTful Web APIs》(2013),作者 Richardson 及 Amundsen

這本書(簡稱 RWA)可以看作同樣由 Richardson 及 Ruby 所編寫的 RESTful Web Services (簡稱 RWS)這本著作的“姐妹篇”。只是 RWS 關註的是 HTTP 資源,而 RWA 則更多地關註於超媒體格式。這本書嘗試著探索語義化 Web 這一龐大的主題,包括對一些基於 RDF 的格式進行了回顧,並且通過對“檔案(Profiles)”的介紹,將應用程序級別的意義引入到 Web API 的範圍中。與 Leonard Richardson 共同編寫這本書的經歷相當愉快,這本書問世後的反響也非常良好。

次要書籍清單

在我所閱讀過的大量書籍中,我發現其中的一部分雖然從技術角度來說“不屬於”API、HTTP 和 REST 的範疇,但對於我進行分布式應用的設計及實現依然能夠提供很大的幫助。以下這些書籍是我精挑細選過的,希望它們能夠將你的視野從一般的 API 書籍中拓寬到更廣闊的世界。

《設計心理學》(The Design of Everyday Things)(1988-2002),作者 Donald Norman

這本書最初發布於 1988 年,它為人機交互(HCI)這一主題打下了基礎,即我們所說的可用性。Norman 通過大量的示例展現了人類與設備(不僅僅是計算機)進行交互的方式,並且定義了行為生命周期(Action Lifecycle)這一概念,闡明了“可供性(Affordance)”的意義。本書還為讀者提供了許多良好的建議,幫助讀者進行思考:作為一個設計 者,如何基於用戶群、設備所使用的環境、以及你所設想的目標,進行用戶界面的設計。這本書絕對是你的書架上必不可少的一本。

《尋找確定性》(In Search of Certainty)(2013),作者 Mark Burgess

Burgess 是 CFEngine 這項技術的創始人,它能夠作為一個第三方的代理對大規模的基礎設施進行監控。通過在這項技術上所獲得的經驗,他為復雜的計算機系統設計了一個免疫模型。這 本書記錄了他如何從一個簡單的想法開始,直到設計出能夠成為網絡的“代理”的角色的一整套工具。我很喜歡此書的編寫風格,以及其中對物理學、腦科學及通用 計算科學的大量引用。全書的最後部分對於他自己的產品的描述有些偏多,但這也是可以理解的。畢竟,正是作者在 CFEngine 上的工作成果,才促成了這本書的出現。這本書能夠幫助你思考,如何成功地為網絡創建安全的自動化爬蟲機器人。

《信息簡史》(Information: A history, a Theory, a Flood)(2012),作者 James Gleick

Gleick 在 1987 年所出版的著作《混沌》(Chaos)讓混沌理論廣為人知,而這本書也使信息理論成為大眾話題。作者講故事的本領非常高超,在這本 300 多頁的書中涵蓋了大量的內容。無論是遠程控制(remote drumming)還是量子計算(quantum computing),Gleick 都能夠用精彩的故事與實際生活中的見解為你一一講述。我至今仍然會隨手閱讀本書的某些章節,仔細體會其中的樂趣。

《信息論簡介》(Information : A Very Short Introduction)(2010),作者 Luciano Floridi

這本書能夠幫助你快速地理解信息論的基礎。本書的起始部分為你解釋了數據與信息的不同之處,隨後介紹了信息論是如何與數學、物理學、生物學、經 濟學乃至社會倫理學產生聯系的。Gleick 擅長講述故事,而 Floridi 則擅長列舉事實,並將各個學科聯系在一起。以上這兩本書可謂絕配。

《回憶錄:超文本的演變》(Memory Machines: The Evolution of Hypertext)(2013),作者 Belinda Barnet

如果你希望了解超文本在過去(是的,半個多世紀了)50 多年間設計與演變背後的故事,那麽就應該讀一讀這本書。Barnet 在本書中收錄了她與 Ted Nelson、Douglas Englebart、Tim Berners-Lee 以及其他多位專家的訪談內容。在本書中,你將大致了解各種相互抵觸的思想和市場的力量是如何將超文本/超媒體打造成我們今天所知的模樣。同時,你也將了解 到關於超文本的使用及實現的許多最初的設想,這些設想直到如今都還沒有成為現實。

《復雜》(Complexity: A Guided Tour)(2011),作者 Melanie Mitchell

這本書是關於復雜理論方面的書籍中很容易為人接受的一本,Mitchell 為讀者簡單地介紹了一些復雜理論的歷史,有關各種設備的遺傳編程(genetic programming)理論,以及大型系統的自動機編程(automata programming)概念。書中包含了大量清晰的示例以及可運行的代碼。對於任何一位有興趣深入挖掘這一龐大主題的讀者來說,這本書都會成為一本優秀 的參考書。

其它資源

這裏列舉了一些我經常會隨手翻閱及參考的論文、博客帖子及其它資源。通常在有人向我索取某些主題的示例、說明及相關背景時,我就會向他們推薦以下鏈接。

《架構風格與基於網絡的軟件架構設計》(Architectural Styles and the Design of Network-based Software Architectures)(2000),作者 Roy T. Fielding

這是一篇論文的原文,它從面世起就引起了巨大的爭論(微笑)。每個進行 API 相關工作的人都應該認真地讀一讀這篇文章。文章本身並不長,而且也不難懂,正是這篇文章提出了 REST 這一術語。通常來說,讀過這篇論文的人多數都只讀了第五章:“具象狀態傳輸(REST)”。但對我來說,這一章並非論文中最優秀的一部分,我更偏愛第二 章:“基於網絡的應用程序的架構”,這一章描述了創建分布式系統的理論,以及理想的結果。實際上,我對於閱讀這篇論文的建議是:按照二、一、四、三、六的 順序依次讀下來,最後才是讀第 5 章。沒錯,就是要把 REST 這一章放到最後才讀。如果你能按照這種方法來閱讀本書,相信你會獲得更大的收獲。

《REST API 必須是由超媒體驅動的》(REST APIs must be hypertext-driven)(2008),作者 Roy T. Fielding

這篇著名的博客帖子是與 RESTful Web Services 一書在同一年間發布的,Fielding 在帖子中解釋到,在他所定義的 REST 風格中,超媒體(他在文中使用的名稱是超文本)是不可缺少的一環。之後,他又對這篇帖子的內容進行了引申,解釋了他對“超媒體即應用程序狀態引擎”這一短 語的定義。現在人們習慣於將這一短語簡稱為 HATEOAS,而 Fielding 本人還是傾向於稱之為“超媒體的限制”。提示:這篇帖子後的留言,是 Fielding 在 REST 這一話題上我所見過最有價值的對話了。

《各種 JSON 超媒體類型的區別和優劣是什麽》(What’s different/better/worse than other JSON hypermedia media types?)(2013),作者 Swiber 等眾人

在 2013 年年中,在 Kevin Swiber 所創建的 Siren 這個 JSON 超媒體格式的開源代碼庫中,有人向他提出了一個很好的問題,即在實現中應當如何選擇使用哪種超媒體 JSON 格式。在這個問題的留言中產生了許多有價值的觀點,各種流行格式的作者(HAL 的作者 Mike Kelly、Siren 的作者 Kevin Swiber、MASON 格式的作者 Jorn Wildt,以及作為 Collection+JSON 作者的我本人)紛紛就此問題發表了觀點,在整個帖子中可以看到大量的知識要點。如果你也打算為超媒體選擇一種 JSON 格式,那麽這些評論就是十分重要的參考資源。

《超媒體類型》(Hypermedia Types)(2011),作者 Amundsen

這是我在 2010 啟動的一系列網絡文章,旨在通過對所有的超媒體類型都各自具有的一系列屬性進行分析,將它們各自歸類。我定義了名為“H-Factors”的一系列元素, 以幫助讀者學習超媒體是如何在商業應用中發揮作用的,這些元素隨後也為一些朋友所引用,用於設計及分析超媒體格式。這一系列目前還沒有全部完成,有時當有 人向我索取關於超媒體的控制以及實際工作方式的基礎資料時,我也會向他們推薦這個鏈接。

《如何遵從指令》(How to Follow Instructions)(2012),作者 Richardson

這是由 Leonard Richardson 所做的一次精彩的演講,主題是如何使用超媒體創建能夠為計算機所理解的指令,以便讓客戶端遵照這些指令進行操作。他在演講中精彩地講述了自己的觀點(其中 回憶了昔日的時光,當時 HTTP 和超鏈接還沒有那麽流行,但 BBS 與文件服務器已經存在了),幻燈片本身也非常優秀。這篇講座絕對值得你花上 50 分鐘的時間去把它聽完。

《設計超媒體 API》(Designing Hypermedia APIs)(2012-2014),作者 Klabnik

在如何使用超媒體的實現可運行的代碼方面,讀者們可以從 Steve Klabnik 那裏學到許多接地氣的、不講空話的建議。他從 2012 年開始啟動了這本“不斷完善內容的書”以講述超媒體的相關技術,並且至今還在不斷加入新的內容。如果你希望找一本內容完整,從頭至尾一氣呵成的書,那這份 資源或者並不適合你。不過,如果你希望持續關註如何使用超媒體創建及維護系統的相關知識,那麽 Klabnik 的這一名為“設計超媒體 API”的網站是在你日常閱讀之外一份非常優秀的資源。我經常會隨手翻閱這些資源,並且經常會上他的網站看看有沒有什麽最新的更新。

結論

感謝各位隨我瀏覽了我的書架中的優秀書籍及我的書簽收藏。雖然說還有大量值得分享的其它書籍及鏈接,但在我看來,這個列表能夠成為一個良好的開 端。如果你在設計與實現 Web API 方面有哪些經常用於參考的其它資源,我也很樂意去拜讀一下。請你在本文的末尾留言,讓我們看看是否能擦出某些火花。

延伸阅读

    评论