天天看點

《SOA與REST:用REST建構企業級SOA解決方案》目錄—導讀

《SOA與REST:用REST建構企業級SOA解決方案》目錄—導讀

獻詞

soa與rest:用rest建構企業級soa解決方案

謹以此書獻給christophschittko,他毫無顧忌的審閱評注使我們在本書書稿已經送出印刷之後仍然決定改變内容結構,而後續的變化極大地提升了書稿的品質。

——thomas erl

獻給親愛的妻子michelle,獻給我的父母rob和sue,獻給我的孩子genevieve和matthew。感謝你們多年來的支援與鼓勵!

——benjamin carlyle

獻給我的家人及我的esperanza。

——cesare pautasso

向父母的犧牲與支援緻敬!

——raj balasubramanian

對本書的贊譽

“本書通過具體且實用的方式,闡釋了soa和rest領域之間的聯系,簡明地将其運用到日常遇到的架構挑戰上。太棒了!”

——ryan frazier,技術戰略師,微軟公司

“soa可以通過許多不同的方法實作,而rest則是潛在的實作架構中最閃亮的新方法。本書向架構師和開發人員介紹了實作restful soa所需的知識,而最重要的是,它告訴人們一種通過rest實作soa的風格:其核心是設計服務生态系統,在其中向客戶提供簡單的使用資源的方式,并通過服務将資源連接配接起來。本書無疑将有助于使soa從web架構的主要價值主張(分散、松耦合、連通性、自描述服務、獨立于實作的服務接口)中獲益。”

——erik wilde博士,架構師,emc公司

“這是一部傑作,它将rest原則優雅地運用到該叢書中的工業标準soa架構上。書中為實踐者提供了有用的指導,并且在形式和精神上都與roy fielding論文中定義的rest限制保持一緻。有關restful契約設計的章節使本書物有所值。本書對于任何開發rest服務的人來說都是必讀的。”

——dave slotnick,企業架構師,rackspace hosting

“面向服務模式的精彩大作,它将有效地解決現實世界裡的問題。rest觀點和原則将完全地覆寫現代web 2.0風格的方法。強烈推薦。”

——sid sanyal,it架構師,蘇黎世金融服務公司

“rest不僅僅是接口的另一種實作方法。本書為我們展示了服務組合生态系統如何随着服務組合架構設計的新機遇而變化。對于任何正在考慮rest風格服務建構應用程式架構的認真的it架構師來說,這都是一本全面指南和必讀之作。”

——roger stoffers,解決方案架構師,惠普公司

“面向服務和rest這兩種架構風格都是現代應用程式和雲計算的基石。它們都緻力于傳遞可伸縮的、可互操作的解決方案,但是它們的不同根基使得它們并不能天然地互相配合。本書闡述了如何在企業環境中使二者協調工作。書中讨論了一組設計流程,它們使服務集合在滿足soa目标的同時又符合現有的rest限制。此外,為使rest風格滿足企業級需求,它還務實地在必要之處放松了限制。”

——christoph schittko,雲戰略總監,微軟公司

“這是一本鼓舞人心的書,它為下一代基于rest的面向服務的系統的設計與開發帶來了深刻見解。本書務實地闡述了soa與rest的融合,解決了工作中常見的實際問題。對于軟體設計師、架構師和顧問來說,是必要的‘現代服務實作的工具’和‘強大的知識體系’。”

——pethuru raj博士,企業架構師顧問,wipro顧問服務公司

“thomas erl的服務技術叢書一貫地使用簡單的例子說明複雜的概念。在該叢書中的最新著作《soa與rest》中,作者通過常見的soa語言來讨論rest。《soa與rest》對企業架構師和開發人員來說都是極好的資源!”

——kevin p. davis,博士,軟體架構師

“不同于其他相似内容的書籍,《soa與rest》一書中的叙述做到了完善、易讀,包含了現實世界的案例研究,可同時滿足開發人員和分析師的需要。對于soa實踐者及任何計劃啟動soa項目的執行者來說,這都是不可或缺的資料。”

——theodore t. morrison,認證的soa分析師,csm,geocent,llc

“任何将rest應用程式建構為面向服務架構的it架構師或軟體工程師,要想深入了解其中原則、模式和實作概念的話,就都需要讀一讀這本書。它不僅包含了基本的話題,還探讨了rest與各種特定的soa原則及模式之間的關系。”

——sanjay singh,認證的soa分析師,開發經理,northgatearinso

“一本面向企業架構師、分析師、開發人員的權威的上乘參考書。本書不僅展示了rest的優雅、簡單性和通用性,還使我們清楚地了解了rest是如何增強soa和面向服務的,rest如何能夠影響soa設計目标,我們如何來設計和開發rest服務,我們如何解決rest內建到面向服務時所面臨的獨特挑戰。任何以rest來建構面向服務架構的人,想要掌握這門技術,都有必要閱讀本書。”

——philip wik,mss technology

“這是一本了解如何在面向服務架構中采用rest的基礎而全面的書。對于任何對面向服務感興趣的實踐者來說,書中提供的許多示例和模式将是非常寶貴的資源。”

——gustavo alonso,計算機科學系,蘇黎世聯邦理工學院

“soa和rest是分布式計算中兩種非常重要的架構風格。soa成功地在大多數企業中得到采用,而研究者和工業使用者越來越多地關注rest風格。《soa與rest》一書介紹了一種新的架構風格,巧妙地結合了soa和rest風格,清晰地揭示了兩者的協同工作,通過rest來産生成功的企業soa政策,以及對架構設計決策提出指導。本書是使用rest來設計和實作soa架構的最佳實踐的聖經。這是一本it實踐者和研究人員的必讀書籍。”

——longji tang,聯邦快遞it進階技術顧問,csse博士

“rest和soa是過去十年間在軟體工業中被誤解最多的兩個術語。然而rest架構風格加上現代restful架構實作,提供了可伸縮和可靠的soa方式。本書涵蓋了關于如何将rest原則應用到小型和大型soa開發中的全面闡述。如果你已經熟悉rest并在考慮soa,那麼你需要本書。如果你還沒有在你的soa工作中考慮rest,那麼本書同樣适合你。它囊括了rest和soa的概念,還包含了設計模式與使用的時機,本書是架構師和工程師的精彩指南和優秀工具。”

——mark little博士,jboss首席技術官,紅帽公司

“本書精彩地介紹了如何将soa方法論與restful架構風格的服務結合起來。對于soa架構師如何更好地了解将rest內建到面向服務架構流程的含義和要求,thomas erl及其合著者們提供了很大的幫助。”

——gerald beuchelt,mitre

譯者序

如今,在企業級解決方案領域,soa這一詞彙已不再陌生。幾十年來,為了打通不同時期使用不同技術建設的資訊孤島之間的連接配接,人們一直在改進軟體工程方法,也嘗試過很多不同的技術手段,比如點對點(p2p)的內建、基于消息的內建(messaging)、企業應用內建(eai)等,它們在各自的曆史舞台上發揮了重要的作用。然而,直到面向服務思想和面向服務架構的誕生,這一問題才真正得到有效解決。

與soa不同,rest是在網際網路環境中成長起來的,根據fielding博士的論文,rest是為了解決網際網路規模的軟體架構所面臨的問題而誕生的。尤其,當rest與http标準結合起來,通過restful web服務本身的優勢,如無狀态性和幂等性,為提高系統的可伸縮性起到重要作用。rest以其簡潔性、更低的資源占用,統一接口抽象、代理伺服器支援、緩存伺服器支援等諸多方面的優勢深閱聽人多架構師和開發者的喜愛。

作為兩種優秀的架構風格,它們都不缺乏推崇者。自然地,二者之間的論戰逐漸成了技術圈的熱點話題。網絡上關于 soa與 rest的論戰非常之多,但是,它們大多聚焦于二者之間的差異,有的soa的擁護者稱rest不适合企業級應用,而rest的擁護者則把對soap協定的抱怨轉嫁到soa的身上。

thomas erl站了出來。他說,兩種架構風格的目标有諸多相同之處,即便在企業級解決方案中,soa和rest也能夠相得益彰,通過“戰術性”的rest媒介實作“戰略性”的soa的戰略目标。thomas erl是soa領域的大師級人物,他在soa方面的諸多著作,尤其是其“soa系列著作”,為架構師和開發者們提供了豐富的理論知識和實踐指引。

本書全面介紹了面向服務概念、rest限制及目标,并且針對企業應用所面臨的問題提出了用rest來實作soa的設計目标和架構原則。作者提出了在分析和模組化過程中的注意事項,并啟發出一些新的soa設計模式。

作為本書的譯者,我們為能夠翻譯這樣一本優秀的著作而感到榮幸。盡管我們各自都有許多工作和事情要處理,但是我們盡量利用下班後和周末的時間,兢兢業業地翻譯這本書,不敢有一絲疏忽和怠慢,生怕由于自己的失誤而未能準确地表達作者們的原意。

我們從2012年9月開始翻譯此書,翻譯分工如下。

馬國耀負責翻譯第4、6、7、14、15、16章及附錄e,這些章節的内容包括:soa術語和概念,rest服務契約,rest與面向服務的關系,受rest啟發的設計模式,rest服務版本控制,統一契約介紹,soa設計模式概要等。

申健負責翻譯第2、5、11、12、13章及部分附錄,這些章節的内容包括:案例研究背景,rest限制與目标,rest服務組合,rest進階服務組合及案例研究等。

劉蕊負責翻譯第1、3、8、9、10章及部分附錄,這些章節的内容包括:内容導讀,服務基礎知識,主流soa方法論及rest技術,rest服務的分析與模組化,rest面向服務的設計等。

在翻譯過程中,我們采用疊代方法,每人各翻譯完一個章節之後就進行一次審校疊代。我們采取a審校b,b審校c,c審校a(或相反順序)的方式進行審校,所有意見不一緻的地方由定期會議仲裁解決。全書最後由馬國耀進行統一修訂和審校。

由于譯者的能力水準有限,難免存在疏忽與差錯,在此懇請讀者見諒,并給予批評指正。

翻譯是個痛苦而辛苦的過程,翻譯《雲計算與soa》的經曆讓我感觸很深。另外,由于自己工作上進入一個新的平台以及剛出生的女兒的緣故,根本沒有太多空餘時間來翻譯。是以,我本不打算翻譯這本書的。但是,在人民郵電出版社楊海玲女士的邀請和李锟先生的鼓勵之下,我快速閱讀完了本書,在此之後我就再無絲毫猶豫。因為,不将本書呈現給國内的讀者和廣大soa從業者,我覺得是一個遺憾。于是,就有了連續一年翻譯曆程。在這個過程中,我結識了申健、劉蕊兩位認真而專業的譯者,這一年來的溝通與交流是難忘而深刻的,感謝你們。最後,感謝家人對我一貫的支援,特别感謝我的妻子和女兒,因為翻譯這本書所用的時間正是原本應該用來陪伴你們的時間。

——馬國耀

回首過去忙碌的一年,看到自己在企業内完成了手機銀行解決方案的重要演進,輔導了更多的靈活團隊,在企業外結識了更多的朋友,鍛煉了更多的技能,并在而立之年邁出了職業生涯中新的一步。同時,看到天津軟體社群變得熱鬧起來,南京大學天津校友會愈發壯大,女兒的輪滑也練得有模有樣了。最重要的,就是有幸與馬國耀、劉蕊兩位戰友共同完成了這本書的翻譯。三個人素未謀面,僅憑着互相信任和彼此認同工作在一起,每個人都投入了大量業餘時間,字斟句酌,反複推敲。還記得每天下班後雖然已經很累,卻仍在夜深人靜時翻譯幾頁;還記得每次疊代互相審校之後,即使事先郵件溝通過多次,大家還是會在skype上讨論到深夜;還記得百會工作表中數百條待定意見逐一關掉後獲得的滿足感。當然,我們應該可以做得更好,比如在每次疊代後都盡快拿到出版社的回報意見,盡早做出翻譯風格的調整。無論如何,這是一段存在我深深的腦海裡的難忘經曆,因為能與志同道合的朋友共事的機會是奢侈的。我也從兩位合作者的精神和專業知識中學到了很多,感謝有你們。另外,也要感謝家人的支援和照顧,使我能夠安心地投入工作。

——申健

2012年對我而言是特殊的一年,在大洋彼岸開始了一段新的生活。因為懷孕,準備生老二,賦閑在家,怕自己跟技術脫節,作為一個soa實踐者,我對rest結合soa這一論題很感興趣,于是加入了這段長達一年的翻譯曆程。我同另外兩位譯者并不熟悉,與申健之前不認識,國耀雖然是以前的老同僚,但也僅限于郵件打過交道。一開始我對這種遠端合作的模式的想象是非常松散的。但是實際上,國耀很快把翻譯的工作組織的井井有條,利用百會表格互動分工安排,詞彙勘誤;互相進行審校;使用skype進行定期交流,讨論所有翻譯中有争議的部分;利用rest技術qq群與潛在讀者進行相關技術讨論。這種工作模式讓我在忙碌的家庭瑣事之餘感覺到自己是個有追求的it professional!終于,書籍翻譯完成時,我家的max呱呱墜地,定稿前,我剛好開始了在澳洲的第一份工作,有幸參與一個大型的soa項目,而我也有機會将閱讀本書過程中得到的新知識加以運用,尤其是服務的篩選,事務的處理等相關知識。感謝本書,充實了我在澳洲的第一年,讓我認識了兩位朋友,拓展了rest相關的soa知識,這段翻譯曆程,将會成為我的一段珍貴的回憶。

——劉蕊

2002年初我第一次聽到rest時,我就堅信新興的web服務規範和标準即将帶來的價值。起初,我隻是對這一方法充滿好奇,尤其“統一接口”的理念,但是很快我便得出結論,雖然rest很有吸引力,但是它卻幾乎無法适用于企業環境。

一兩年之後,我便開始欣賞rest風格的優雅和簡潔性了。而且,我還認為在某些場景下rest是更好的選擇,雖然一些進階的場景仍然需要使用soap、wsdl和ws-*。又過了一年之後,我開始發現自己在大多數情況下都更傾向于rest風格的http,而非soap風格的web service,并且我已經說服了自己,并決定自稱為“rest盲從者”。我開始堅信,現在仍然堅信,遵守rest架構風格的限制不僅能使公共web上的系統變得更好,而且還适用于各種企業環境。

今天,rest已經成為主流—連同它對别的技術所産生的正面及負面的影響。我們現在向人們介紹rest方法時是相當輕松的,即便在大企業裡也不例外,人們不再對此不屑一顧了。此外,讓我驚訝的是,很多時候人們甚至将其視為預設選擇。

是以,rest社群應該感到高興和滿足,并對我們在公共web上及企業内建構出各種優秀的系統開發及內建充滿期待。但是,這裡仍然存留着兩個問題:一是,并非所有聲稱restful的架構都是名符其實的;二是,soa常常被看成由ws-*風格的web service組成的架構,是以與rest不相容。

“rest”名稱的誤用

遵循rest原則,應用web技術(如http和uri),使用超媒體格式(如html),就能使系統變得可演進、動态且穩定,并且可以通過新的未預見的方式連接配接系統。可是,真正稱作“restful”的建構系統或內建系統的方式需要一種全新的設計方法,它不同于大多數開發人員過去所使用的方法。若選擇rest方法而非分布式對象、rpc或ws-*時,需要通過資源、媒體類型、超媒體及統一接口來表述整個接口域。你将發現,對這些概念了解得越深入,就越能輕松地堅持rest的内在限制,越容易挖掘rest的價值。

因為wsdl/soap/ws-*架構的一個根本設計決定是“傳輸獨立性”,是以通過它們建構的系統很難成為restful的,幾乎無人反對這一說法。但是,即便沒有出現xml或soap,web的底層理念也很容易遭到違反。網際網路上充斥這樣的例子:通過http get或post實作的管道(tunnel)方法調用,忽視緩存和超媒體,将構成uri的字元串當作開發用的api。使用json、http和“簡潔”的uri不一定意味着系統就是restful的。不要想當然地把任何宣稱為“restful api”的東西都當作典範。

評判soa

“soa”這個标簽已經被完全炒作殆盡了。在我看來,這主要由于很多人将它與web service技術(最初它是支援soa的流行方法)緊密關聯的緣故,而且此現象仍然在繼續。網絡上許多有關soa與rest的比較大多将它們強行地變成類似于蘋果與橘子之間的比較。是以,我們有必要回過頭來看看soa最初的動機。

在任何公司裡,整體it環境都是由許多單獨的系統構成的。這些系統運作在不同技術之上,最初通過不同的工具建設而成。有些來自與商業廠商,有些是企業内建的。一段時間後,你會想把它們連接配接起來,因為這麼做的價值是顯而易見的。你可以采用點對點的內建方式,通過檔案、共享資料庫或其他內建解決方案,從某個系統中導出一些資料,定期地導入到另一個系統中。這麼做的結果是,你将得到一個脆弱的、不易于管理的it環境。

因為系統內建的工作非常困難,是以你(或為你服務的廠商)會使其變得越來越臃腫,直到你不得不付出巨大的代價來改變。盡管引入集中式的內建中間件起初看起來非常誘人,但它卻不是個好辦法。你将依賴于一家廠商,它有可能被另一家收購,或者破産,或在你與競争對手(它采用的是另一家産品,而且更時新)合并之後變成遺留系統。

那麼,你該怎麼做呢?你應該合理地解決這一問題,通過在接口層限制不同技術的數量來減少內建系統所需的工作。為實作這一目标,你可以選擇一種較好的接口抽象方法,将大型應用系統分解成更細粒度的功能子產品。這樣,你就無需依賴于單個廠商,不論它是中間件廠商還是應用系統廠商,你期望功能便于使用(及重用)。應該不會有人否認這是一個合理的方法。

對我而言,這就是soa的本質:它是一個運用于企業内一組應用而非單個應用的系統軟體架構;它重點關注網絡和系統間的接口,而非實作;它進行一切必要的标準化,確定流暢的互動和偶爾的重用;别無其他。幾年前,我們發表soa宣言時,重點關注的是内在互操作性,我認為,這才是真正象征着soa和面向服務的特性,也正是它促使了soa與rest原則的對齊。

在我看來,面向服務是非常值得追求的一個目标,而restful http是目前看到的實作這一目标的最佳方法。任何其他架構都不具備如此廣泛的支援,便利地支援重用,以及相同的對持續演變的支援。然而,在soa環境中使用rest仍然處于初級階段,到目前為止,尚很難找到成熟的最佳實踐與模式。

本書的貢獻

本書的作者們對于什麼是rest,什麼不是rest具有非常清晰的了解,是以,本書給你帶來的知識,可以幫助你區分哪些是真正的restful,哪些又隻是自我标榜。你将學習soa與rest的基礎知識,還會了解若幹結合了soa與rest的設計模式。你還會學到如何建構服務及服務消費者。

建構restful系統和內建場景的工作非常需要指引,而且該指引不應該隻滿足于短期的成效,而應更加注重于長期的收益。我堅信本書的作者們是你能夠找到的最佳指引。我非常肯定,你也将會相信rest與soa非但不沖突,反而是完美的搭檔。

——stefan tilkov, innoq

緻謝

gustavo alonso,蘇黎世聯邦理工學院(eth zurich)計算機科學系

gerald beuchelt,mitre

kevin davis

jean-paul de baets,比利時政府

roy fielding

ryan frazier,微軟公司

michael grube,諾德斯特姆公司(nordstrom)

dolly kandpal,qamlo資訊服務

jana koehler

ivana lee,arcitura教育

mark little,紅帽公司

damian maschek,德國鐵路公司

theodore morrison,geocent公司

pethuru raj博士,wipro咨詢服務公司

ian robinson

sid sanyal,蘇黎世金融服務集團

al scherer,佛萊特高等教育集團

christoph schittko,微軟公司

sanjay singh,northgatearinso

dave slotnick,rackspace

roger stoffers,惠普公司

longji tang博士,聯邦快遞公司

clemens utschig-utschig,勃林格殷格翰公司(boehringer ingelheim pharma)

philip wik,mss

erik wilde,emc

本文僅用于學習和交流目的,不代表異步社群觀點。非商業轉載請注明作譯者、出處,并保留本文的原始連結。

目錄

前言

<a href="https://yq.aliyun.com/articles/95162">第 1 章 介紹</a>

<a href="https://yq.aliyun.com/articles/95162">1.1節關于本書</a>

<a href="https://yq.aliyun.com/articles/95167">1.2節推薦閱讀</a>

<a href="https://yq.aliyun.com/articles/95176">1.3節本書的組織方式</a>

<a href="https://yq.aliyun.com/articles/95182">1.4節約定</a>

<a href="https://yq.aliyun.com/articles/95188">1.5節附加資訊</a>

<a href="https://yq.aliyun.com/articles/95193">第 2 章 案例研究背景</a>

<a href="https://yq.aliyun.com/articles/95193">2.1節如何使用案例研究</a>

<a href="https://yq.aliyun.com/articles/95206">2.2節案例研究背景之一:中西部大學聯盟(mua)</a>

<a href="https://yq.aliyun.com/articles/95218">2.3節案例研究背景之二:kiosketc有限公司</a>

第一部分 基礎知識

第 3 章 服務簡介

第 4 章 soa術語和概念

第 5 章 rest限制和目标

第二部分 rest風格的面向服務

第 6 章 rest服務契約

第 7 章 用rest實作面向服務

第三部分 rest環境下面向服務的分析與設計

第 8 章 主流soa方法論和rest

第 9 章 rest服務分析與服務模組化

第 10 章 面向服務的設計和rest

第四部分 rest服務組合

第 11 章 rest基礎服務組合

第 12 章 rest進階服務組合

第 13 章 rest服務組合之案例研究

第五部分 補充

第 14 章 soa與rest的設計模式

第 15 章 rest服務版本控制

第 16 章 統一契約概要

第六部分 附錄

附錄a 案例研究結論

附錄b 支援web的工業标準

附錄c rest限制參考

附錄d 面向服務原則參考

附錄e soa設計模式參考

附錄f 狀态的概念和類型

附錄g 帶注解的soa宣言

附錄h 其他資源

書中提到的模式的作者

關于序的作者

關于作者

歡迎來到異步社群!