自 J2EE 草創期以來,我對 ATM 一直非常推崇,但這篇報導著實讓我有些驚訝!或許其中難免有幾分媒體的加油添醋,但大膽宣稱「SOA 的未來在 REST」,實在是太過火了。很仔細地看完相關的幾篇報導,仍感覺裡面有幾分炒作!猶記得大約在兩年前,透過一個 podcast,聽過一場 ATM 關於 SOA 的演講。在 Q&A 過程中,有人問到 REST,ATM 當時很堅定地表示,儘管 REST 更適合一些非常大訪問量的情境,是 Google, Yahoo, Amazon 等網際網路公司所必須,但在企業應用的領域,ATM 說,許多需求,例如安控、policy、交易處理… 等, 還是只有 SOAP 和 WS-* 做得來,REST 是不夠的。
但三個月前的這場宣告,加上幾分渲染,讓人感覺她似乎完全推翻了過去的立場。ATM 的其他同僚,當然不忘趁機一擁而上,大炒 REST 概念股,口氣往往比 ATM 本人更加露骨許多(她還是比較中肯的;稍後再談)- 有的 (Peter Lacey) 說目前的 Web services 標準遠遠不足,正妨害著 SOA 發展,只有從 REST 開發帶來的約束力中,才能得到救贖。
這位仁兄上周在談資料服務(data services,美國今年 SOA 界的熱門主題)時,更大言 REST 與資料服務是天作之合,儘管基本上的確有幾分道理,但同時似乎也有意無意地避談或淡化可行性的問題,包括目前不管在資料服務相關工具、 middleware 等領域對 REST 的支援程度,更忽略了廣大對物件導向已經根深蒂固的架構師和開發人員,需要多久的適應期,來對 REST 這種需要改採資源導向的新設計觀念來進行「換腦」工程。
簡單地說,覺得他講的不夠務實。
到底什麼是 REST?這個問題太好、太重要了!因為目前 REST 和 SOAP 的爭論中,存在很多將 REST 擴大解釋的現象。不少人其實連 REST 真正的精神還本質根本都還搞不清楚,就以 “RESTafarian”(網上對實行「REST 主義」者的特殊稱號)自居,以為自己做的是 REST 應用,但很多其實不是(REST 的名氣大多是被這幫人所炒起來)。REST 全名 “Representational State Transfer” 。它的名稱由來、概念、理論基礎,和原則,源於 Roy Fielding 2000 年的博士論文。簡單地說,只要掌握幾個關鍵原則,便可巧妙地運用 WWW 的先天機制,藉而設計出許多簡單而且極為 scalable 的應用。這是一種「資源導向」的設計哲學,將應用所處理的對象用「資源」的觀念來規劃,應用只需利用 HTTP 內建的 GET, POST, DELETE, PUT 等,作為統一而簡單的 “API”,對這些資源的表現形式和狀態(REST 中的 “RES”)做修改和轉變(REST 的 “T”),來達到維護和處理資料的目的。 關於對 REST 的快速入門,我推薦《SOA Using Java Web Services》這本書的第三章(試閱章節可由此免費下載),這本書只用了第三章開始的短短兩三頁,便點出很多重點 - 包括對 SOAP 和 RESTful 這兩種 Web services 的 styles,做了一個務實的比較;此外並提到,許多被認為是 REST 的應用,包括 Amazon.com 發布的許多 Web services,還有一些使用 cookies 的 “REST” 應用,其實都違反 Fielding 所闡述的基本原則。
另一本推薦的書 - O’Reilly 所出版的《RESTful Web Services》,恰好可免費下載的章節,所談的正是作者想提倡的正統 REST 設計理念。他們採用了 ROA - Resource-Oriented Architecture 來闡述這個理念,藉以和號稱 RESTful,但只是以 REST 之形,行 RPC 之實的做法作區隔。為什麼要這麼強調 Fielding 所揭櫫的基本原則?就拿無狀態性來講,如果違背這個原則的話,例如在 server 端維護 session 資料,那麼 REST 在 scalability 上的優勢就不復存在。儘管許多 REST 擁護者在宣揚 REST 時不忘強調這些 REST 的優勢,但實際上不少他們開發出來的 “RESTful 應用” 不見得享有這些優勢。
前面提到 ATM,儘管我感覺她多少有利用自己過去累積的SOA光環,短線操作 SOA 和 REST 話題之嫌,但很高興看到她在其他許多場合(例如這個 InfoQ 專訪和這個 blog)所表達的訊息和看法,仍是十分正確而鏗鏘有力,她強調許多號稱 RESTful 的應用,其實只是 POX (Plain Old XML) - POX 只不過指訊息的 payload 採用單純的 XML,而不經 SOAP 或 Atom 那樣的信封包裝。很多 POX 應用其實不是 RESTful,而 RESTful 應用則也不見得必須是 POX。
有的人說 REST 很簡單,就是 XML over HTTP,其實不是這麼回事。(續下頁)
繼續閱讀: REST的內涵>>
