2012/03/09

SOA 討論

Service Oriented Architecture

資料來源:
http://www.cc.ntu.edu.tw/chinese/epaper/20070620_1008.htm - 2007.06.20

× 請注意資料時間與本文發表時間。

筆記:

> SOA 不是種技術:它是種建構、組織的方法,用來建立應用程式的運行環境。

> 從資訊技術層面而言,一個執行學校或企業業務的應用程式稱為一個獨立的「邏輯單位」,而對學校或企業營運層面而言則可稱為一項「服務」,在企業的整體運算環境中就存在著多個「獨立邏輯/業務服務」。

> 跳脫、超越過往對應用程式的想法,改以「既有服務可否再運用?」或者是「能否沿用其他同仁開發過的服務再建構?」的觀點來面對程式開發。

> SOA 以類似傳訊溝通的作法,將數個所需的「業務服務」進行連結,以此來實現一個新的應用程式,而非「從頭開發」。新的應用程式只要透過「傳訊微調」(參數微調)即可實現,而非「重新撰寫」。

> 組合的元素通常包括:軟體元件、服務及流程三個部份。流程負責定義外部要求的處理步驟;服務包括特定步驟的所有程式元件,而軟體元件則負責執行工作的程式。

> SOA 如同物件導向、軟體元件等軟體技術一般,運用小的零組件組合成應用系統。

> SOA 的作法是以界面標準來組合系統,只要符合界面要求,零組件可以任意替換。

> 以流程角度出發 (process centric):在建構系統時,首先了解特定工作的流程要求,並將其切割成服務界面(包括輸入與輸出資料格式),如此其他的發展者就可以依據服務界面開發 (或選擇) 合適的元件來完成工作。

重點:

> SOA 的實作,就是將所有程式邏輯及服務內容全部包裹在服務內部,並實作一個標準的介面與外部作溝通。

> SOA 介面定義的方式、資料格式、與溝通管道必須是產業標準 (http、XML、SOAP 等)。也就是說只要能實作出這樣的介面,不論介面後面是什麼,都可使成為 SOA。

想法:

簡單說,SOA 是一個概念(Guide),政客一點的講法就是:發展“方針”、發展“大方向”。

SOA(服務導向架構)跟 OOP(物件導向編程)算同宗,把“物件”換成“服務”就很好理解了。
就像物件的類別需要提供各種方法(method,例如 _get;_set)來讓外部呼叫,
一個號稱 SOA 的服務(系統、軟體、網站、etc.)也需要一個 interface 可讓外部呼叫。

“實作一個標準的介面與外部作溝通” 就很重要了。

關於這個介面的火紅名詞:
SOAP、UDDI、WSDL(都是 Web Service 的 XML + HTTP)
http://wwww.w3schools.com/webservices/ws_intro.asp
http://www.w3.org/TR/ws-arch/

不過也有人指出這些東西的毛病:
http://coolshell.cn/articles/3585.html
http://coolshell.cn/articles/3498.html
http://coolshell.cn/articles/2504.html

現在比較流行的是:
REST(Representational State Transfer)

關於 Web Service 的做法可以參考水利署的 API:
http://wrisp.wra.gov.tw/Public/Support/ServiceUseGuide.aspx

而 RESTful API 的樣子可以參考這篇文章:
http://tedwise.com/2009/03/19/what-does-a-rest-interface-look-like