SOA: php
維基百科解釋:SOA:面向服務的軟件架構(Service Oriented Architecture),是一種計算機軟件的設計模式,主要應用於不通應用組件中經過某種協議來互操做,例如典型的經過網絡協議。所以SOA是獨立於任何廠商、產品與技術的。 html
SOA做爲一種架構依賴於服務的方向,它的基本設計原理是:服務提供了一個簡單的接口,抽象了底層的複雜性,而後用戶能夠訪問獨立的服務,而不須要去了解服務底層平臺實現。 java
基於SOA的解決方案,努力使經營目標而創建企業的質量體系。SOA架構是五層水平: web
Web services是創建可互操做的分佈式應用程序的新平臺。 spring
webservice是一種標準,他能夠經過soap或rest的方式來實現。 數據庫
傳統的soap-webservice,使用了soap協議(基於xml包裝)等。若是使用restful-webservice的話,則不須要soap與之相關的協議等,而是經過最簡單的 http 協議傳輸數據 ( 包括 xml 或 json) 。既簡化了設計,也減小了網絡傳輸量(由於只傳輸表明數據的 xml 或 json ,沒有額外的 xml 包裝)。 json
與webservice相關的幾個概念: 設計模式
wsdl:網絡服務描述語言是Web Service的描述語言,它包含一系列描述某個web service的定義。 安全
UDDI: 是一種目錄服務,企業可使用它對 Web services 進行註冊和搜索。UDDI,英文爲 "Universal Description, Discovery and Integration",可譯爲「通用描述、發現與集成服務」。 服務器
UDDI[1] 是一種規範,它主要提供基於Web服務的註冊和發現機制,爲Web服務提供三個重要的技術支持:①標準、透明、專門描述Web服務的機制;②調用Web服務的機制;③能夠訪問的Web服務註冊中心。UDDI規範由OASIS(Organization for the Advancement of Structured Information Standards[1] )標準化組織制定。[1]
其中RMI、RPC、SOAP比較:
普通的Web項目,通常是綁定了特定的渲染語言(jsp、velocity,freemark),固然也有原始的html。可是僅僅限定了特定的返回數據格式與之相對應。Webservice項目則是可以被其餘系統調用(約束了相關格式)。所以普通的利用ssh或者springmvc創建的web項目並無發佈webservice。普通的web項目可使用一些技術將須要發佈的接口發佈出去,就成爲了webservice了。
目前知道的三種主流的Web服務實現方案爲:
REST:表象化狀態轉變 (軟件架構風格)
SOAP:簡單對象訪問協議
XML-RPC:遠程過程調用協議 (已經慢慢被SOAP取代)
REST:表徵狀態轉移(Representational State Transfer),採用Web 服務使用標準的 HTTP 方法 (GET/PUT/POST/DELETE) 將全部 Web 系統的服務抽象爲資源,REST從資源的角度來觀察整個網絡,分佈在各處的資源由URI肯定,而客戶端的應用經過URI來獲取資源的表徵。Http協議所抽象的get,post,put,delete就比如數據庫中最基本的增刪改查,而互聯網上的各類資源就比如數據庫中的記錄(可能這麼比喻不是很好),對於各類資源的操做最後老是能抽象成爲這四種基本操做,在定義了定位資源的規則之後,對於資源的操做經過標準的Http協議就能夠實現,開發者也會受益於這種輕量級的協議。REST是一種軟件架構風格而非協議也非規範,是一種針對網絡應用的開發方式,能夠下降開發的複雜性,提升系統的可伸縮性。
SOAP:簡單對象訪問協議(Simple Object Access Protocol)是一種標準化的通信規範,主要用於Web服務(web service)中。用一個簡單的例子來講明 SOAP 使用過程,一個 SOAP 消息能夠發送到一個具備 Web Service 功能的 Web 站點,例如,一個含有房價信息的數據庫,消息的參數中標明這是一個查詢消息,此站點將返回一個 XML 格式的信息,其中包含了查詢結果(價格,位置,特色,或者其餘信息)。因爲數據是用一種標準化的可分析的結構來傳遞的,因此能夠直接被第三方站點所利用。
XML-RPC:一個遠程過程調用(remote procedure call,RPC)的分佈式計算協議,經過XML將調用函數封裝,並使用HTTP協議做爲傳送機制。後來在新的功能不斷被引入下,這個標準慢慢演變成爲今日的SOAP協定。XML-RPC協定是已登記的專利項目。XML-RPC透過向裝置了這個協定的服務器發出HTTP請求。發出請求的用戶端通常都是須要向遠端系統要求呼叫的軟件。
XML-RPC已慢慢的被SOAP所取代,如今不多采用了,但它仍是有版權的,我在此就不做多介紹。
成熟度上:SOAP在成熟度上優於REST
效率和易用性上:REST更勝一籌(REST效率更高的緣由在於,僅僅是建議的Http協議之上的一種協議。而SOAP則須要對數據、xml封裝信息頭,解封裝等)
安全性上:SOAP安全性高於REST,由於REST更關注的是效率和性能問題
分佈式能力:REST更適合在分佈式環境中使用、由於REST是基於原生Http協議的,而http協議是無狀態的。大型分佈式環境都可以對無狀態支持良好,無狀態加強了整個系統的擴展性。這也是爲何愈來愈多的雲計算,分佈式項目選擇REST。
(注:SOAP也是基於HTTP協議的,可是卻提供了session、cookie等機制來使得SOAP有狀態,從而支持須要有狀態的業務。有狀態舉例:一、增長一個用戶二、獲取最新增長的用戶。那1的執行成功與否,及執行前後順序的狀態將會影響2的結果。)
整體上,由於REST模式的Web服務與複雜的SOAP和XML-RPC對比來說明顯的更加簡潔,愈來愈多的web服務開始採用REST風格設計和實現。例如,Amazon.com提供接近REST風格的Web服務進行圖書查找;雅虎提供的Web服務也是REST風格的。REST對於資源型服務接口來講很合適,同時特別適合對於效率要求很高,可是對於安全要求不高的場景。而SOAP的成熟性能夠給須要提供給多開發語言的,對於安全性要求較高的接口設計帶來便利。因此我以爲純粹說什麼設計模式將會佔據主導地位沒有什麼意義,關鍵仍是看應用場景,正是那句老話:適合的纔是最好的
同時很重要一點就是不要扭曲了REST如今不少網站都跟風去開發REST風格的接口,其實都是在學其形,不知其心,最後弄得不三不四,性能上不去,安全又保證不了,徒有一個看似象摸象樣的皮囊。