字體:小 中 大 | |
|
|
2009/03/10 09:35:05瀏覽326|回應0|推薦0 | |
台灣和日本有不少的鐵道迷, 現在台灣也有捷運, 高鐵和頃斜式列車, 和日本不相上下了.曾經在東京住了兩個月, 坐過東京的每一條捷運線, 搭乘子彈列車通過富士山, 再到箱根搭高山鐵路, 終於成為一位日本鐵道迷, 在澳洲唸書時, 也常搭鐵道, 第一次搭上雙層列車. 在歐洲旅遊時, 也從荷蘭搭鐵道到巴黎, 第一次坐上臥床艙. 說到捷運就更多了, 東京, 巴黎, 紐約, 波士頓, 雪梨, 上海, 深圳. 最近發現 SOA 裡面也有鐵道迷 (Rails). 其中的關連應該從 REST (Representational State Transfer)講起. 目前在 SOA 裡面分為兩派, 一派為 SOAP + WS-*, 另外一派就是 REST. 一般而言, SOAP 比較適合 B2B, REST 比較適合 B2C. 我們比較熟悉 SOAP + WS-*, 對 REST 很漠生. REST 的理念來自一篇博士論文(Roy Fielding, 2000), 裡面談到一些網際網路的設計原則,它是以資源導向 (resource)為觀點, 每個 resource 有唯一的識別代碼, 同時有統一的介面和操作, 論文裡面是建議運用最簡單操作 Create, Read, Update, Delete (CRUD). 在網路實作上,就是 http 的 put, get, post, delete 等四項操作, 同時遵循Client/Server, Stateless, Cacheable, Layered 的原則.也有人提出 ROA (Resource-Oriented Architecture) 來闡述這個理念. 想要快速知道 ROA 和 SOA 在設計理念上的差異, 在勞虎的 "REST 的口水正在洩洪" 中有兩個很清楚的比喻: 例訂單查詢,可以透過一個幕後是 Java 方法的 Web service 來接受用戶請求,用戶端,也就是服務消費者,將訂單序號作為參數,放在請求裡面。在這種設計模式之下,主角是及物動詞,也就是對訂單(受詞)的查詢動作;但如果要改用資源導向的觀念、也就是 REST 理念來設計的話,主角會是那千千萬萬筆的訂單,也就是名詞 - 每筆訂單都有一個獨特、專屬的 URI/URL 來識別, 據以對它們進行各別的查、增、刪、改。 ATM 也舉過一個例子,她說如果用 REST 來設計燈光控制的應用,那你的房子裡面的每一個燈泡都必須有一個獨特的 URI,然後對每盞燈發送開/關的控制信號;而不是透過一個統一的燈光總控來進行控制。看一個自然語言的例子,要表達類似的意念,我們可以說:「我不(太)同意你的看法」,但也可以說「我和你的看法不同」,前者以動詞為重心的表達方式,較為強烈而單刀直入,後者以名詞為主題的表達方式,讓人的感覺較為婉轉,REST 在設計上的體現,也有這種婉轉的味道。 REST 的最大價值,在於它的簡約;只要遵循上回帖子中提到的幾個基本原則,便可直接充分利用 HTTP 和 Web server 先天具備的架構優勢,包括 GET 的請求會被 Web server 有效地 cache,和因不需要維繫各別的 session 狀態,而達到非常高的延展性。Google 和 Amazon 等所提供的 Web services,是最好的明證。這是 REST 的擁護者津津樂道的論點。 記得第一次看到 REST這個字眼是在一份 RFID 的資料上, 摸不著頭緒, 也沒有連想到和 SOA 有關. 現在終於知道為什麼了. 在 REST 實作上稱為 RESTful 軟體, 現在被最多人討論的就是 : Ruby on Rails (RoR) 尤其 Ruby + Rail 的綜效是 Programmer 的生產力大幅提昇, 國外有人做過比較, 它是 Java 10 倍或 PHP 5 倍的生產力. 一個 Java 需要 4 個月的專案, 改用 RoR 只需要 4 天. 這是個 10 倍數的時代, 已經達到另人驚豔的地步.是一個值得注意的發展方向, 就 rest 的英文原意為休息而言, 或許它真的能夠讓 programmer 得到更多休息時間.讓我們視目以代. |
|
( 創作|另類創作 ) |