Web Service 概念

    接觸Web Service 不是很清除它到底是什麼,能做什麼用,經過查看大神們的博客,先大概瞭解下概念;

1、服務(service)。

   傳統上,我們把計算機後臺程序(Daemon)提供的功能,稱爲"服務"(service)。比如,讓一個殺毒軟件在後臺運行,它會自動監控系統,那麼這種自動監控就是一個"服務"。通俗地說,"服務"就是計算機可以提供的某一種功能。

2、SOA

  Service Oriented Ambiguity 中文理解爲,面向服務架構,簡稱SOA


  SOA的提出是在企業計算領域,就是要將緊耦合的系統,劃分爲面向業務的,粗粒度、鬆耦合,無狀態的服務。服務發佈出來供其他服務調用,一組互爲依賴的服務就構成了SOA架構下的系統。


  既然說是一種架構的話,所以一般認爲SOA是包含了運行環境,編程模型,架構風格和相關法論在內的一整套新的分佈式軟件系統構造方法和環境,涵蓋服務的整個生命週期。


  Service-architecture.com將 SOA定義爲:

  本質上是服務的集合。服務之間彼此通信,這種通信可能是簡單的數據傳送,也可能是兩個或多個的服務協調進行的某些活動。服務之間需要通過某些方法進行連接。

所謂服務就是精確定義,封裝完善、獨立於其他服務所處環境和狀態的函數。


  雖然不同廠商或個人對SOA有着不同的理解,但是我們仍然可以從上述定義中看到 SOA的幾個關鍵特徵:一種粗粒度,鬆耦合的服務架構,服務之間通過簡單的定義接口進行通信,不設計底層編程接口和通訊模型。


只要符合它的定義和規範的軟件系統都可以認爲是SOA架構。


3、SOA和 Web Service


  早在1996Gartner就前瞻性地提出了面向服務架構的思想(SOA)Web Service不知爲何物,SOA還只是束之高閣的理論概念。直到2000年以後,W3C才成立了相關的委員會,開始討論Web Service的相關標準,各大廠商一邊積極參與標準制定,一邊推出了一系列實實在在的產品。新的技術和新的產品出現,SOA找到了可以依託的憑藉。隨着 Web Service技術的推出和應用,SOA的思想被一個個效益顯著的信息系統建設項目不斷的示範,才逐漸成爲現今的熱門話題。

   因爲現在幾乎所有的SOA應用場合都是和Web Service綁定的,所以不免有時候這兩個概念混用。不可否認Web Service是現在最適合實現SOA的技術,SOA的走紅在很大程度上歸功於Web Service標準的成熟和應用普及。因爲現在大家基本上認同Web Service技術在幾方面體現了SOA的需要:

 首先,是基於標準訪問的獨立功能實體滿足了鬆耦合要求:在Web Service中所有的訪問都通過SOAP訪問進行,用WSDL定義的接口封裝,通過UDDI進行目錄查找,可以動態改變一個服務的提供方而無需影響客戶端的配置,外界客戶端是根本不關心訪問服務器端的實現。

  其次,適合大數據量低頻率訪問符合服務大顆粒度功能:基於性能和效率平衡的要求,SOA的服務提供的是大顆粒度的應用功能,而且跨系統邊界的訪問頻率也不會象程序間函數調用那麼頻繁。通過使用WSDL和基於文本(Literal)SOAP請求,可以實現能一次性接收處理大量數據。

  最後,基於標準的文本消息傳遞爲異構系統提供通訊機制:Web Service所有的通訊是通過SOAP進行的,而SOAP是基於XML的,XML是結構化的文本消息。從最早的EDI開始,文本消息也許是異構系統間通訊最好的消息格式,適用於SOA強調的服務對異構後天宿主系統的透明性。

  綜合上述觀點,Web Service不愧爲當前SOA的最好選擇。然而,就SOA思想本身而言,並不一定要侷限於Web Service方式的實現。更應該看到的是SOA本身強調的是實現業務邏輯的敏捷性要求,是從業務應用角度對信息系統實現和應用的抽象。隨着人們認識的提高,還會有新技術不斷的發明出來,更好的來滿足這個要求。

上面涉及的名詞太多,我們等一下還會單一的來介紹,用一句話總結它們之間的關係。 SOA不是Web ServiceWeb Service是目前最適合實現SOA的技術。


4、Web Service

在解釋 Web Service 之前,先拋出一個問題。有沒有一種辦法可以實現跨應用程序進行通信和跨平臺進行通信呢?

跨應用程序,主要是指我家開發的系統和別人家開發的系統之間是否可以通信。

跨平臺,主要是指我家用Java開發的系統和別人家用.NET開發的系統是否可以通信。

TIM截圖20180513153658.png

像這樣的需求有很多,例如騰訊QQ上面自帶的天氣功能。

  騰訊要想獲得實時的天氣信息怎麼辦呢?有一種辦法,那就是騰訊公司放個衛星上天,並且在公司中成立一個氣象部門,天天關注於天氣,然後每時每刻更新騰訊QQ上的這個天氣預報信息;這顯然不是一種明智的做法,只是想獲取一下天氣信息,居然要如此高的成本。

  更簡單的做法是讓中國氣象臺提供實時的天氣信息,然後,通過提供接口的方式給騰訊調用。那麼這就遇到我上面所說的問題,如何跨應用與跨平臺調用接口。

  這個時候有聰明的讀者會跳出來說,你傻啊!用HTTP協議啊,主流的編程語言都可以實現基於HTTP協議的應用開發。讓中國氣象臺寫個基於HTTP協議的天氣接口給騰訊調用就可以了。當然,這是完全可以的。不過,Web Service之所以在HTTP之後被提出自然有它的特點。

  當然,這裏拿Web Service HTTP進行比較是不合適。因爲HTTP是互聯網上應用最爲廣泛的一種網絡協議。而Web Service是一種部署在Web上的對象或者是應用程序組件,Web Service數據的傳輸同樣需要藉助HTTP協議。

  更詳細的定義:

  Web service是一個平臺獨立的,低耦合的,自包含的、基於可編程的web的應用程序,可使用開放的XML(標準通用標記語言下的一個子集)標準來描述、發佈、發現、協調和配置這些應用程序,用於開發分佈式的互操作的應用程序。

 

5、SOAP

Simple Object Access Protocol,中文簡單對象訪問協議,簡稱SOAP.

SOAP 是基於XML在分散或分佈式的環境中交換信息的簡單協議。允許服務提供者和服務客戶經過防火牆在INTERNET進行通訊交互。


SOAP 的設計是爲了在一個鬆散或分佈式的環境中使用XML 對等地交換結構化的和類型化的信息提供了一個簡單且輕量級的機制。


 當SOAP消息真正需要在網絡上實際傳輸的時候,SOAP消息能夠與不同的底層傳輸協議進行綁定,同時,SOAP消息可以在很多種消息傳輸模式中使用。包括超文本傳輸協議(HTTP),簡單郵件傳輸協議(SMTP),多用途網際郵件擴充協議(MIME)。它還支持從消息系統到遠程過程調用協議(RPC)等大量的應用程序。

  當然,最多的情況還是綁定在HTTP協議上面傳輸。這就導致大多數人認爲SOAP就是HTTP + XML,或者認爲SOAP是HTTP post請求的一個專用版本,遵循一種特殊的XML消息格式。

雖然,我們看到的大多情況確實如此,但這並不是SOAP本質與全部。


6、WSDL

Web Services Description Language,網絡服務描述語言,簡稱WSDL。它是一門基於 XML 的語言,用於描述 Web Services 以及如何對它們進行訪問。

WSDL 文檔主要使用以下幾個元素來描述某個 web service 

<portType>  web service 執行的操作

<message>  web service 使用的消息

<types>     web service 使用的數據類型

<binding>   web service 使用的通信協議

<wsdl:definitions  
    xmlns:wsa="http://schemas.xmlsoap.org/ws/2003/03/addressing"  
    xmlns:tns="tns"   xmlns:plink="http://schemas.xmlsoap.org/ws/2003/05/partner-link/"  
    xmlns:xop="http://www.w3.org/2004/08/xop/include" xmlns:senc="http://schemas.xmlsoap.org/soap/encoding/"  
    xmlns:s12env="http://www.w3.org/2003/05/soap-envelope/"  
    xmlns:s12enc="http://www.w3.org/2003/05/soap-encoding/"  
    xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns:senv="http://schemas.xmlsoap.org/soap/envelope/"  
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" targetNamespace="tns"  
    name="Application">
    <wsdl:types>
        <xs:schema   targetNamespace="tns"   elementFormDefault="qualified">
            <xs:import   namespace="http://www.w3.org/2001/XMLSchema" />
            <xs:complexType   name="say_hello">
                <xs:sequence>
                    <xs:element   name="name"   type="xs:string"  
                        minOccurs="0"   nillable="true" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType   name="say_helloResponse">
                <xs:sequence>
                    <xs:element   name="say_helloResult"   type="xs:string"  
                        minOccurs="0"   nillable="true" />
                </xs:sequence>
            </xs:complexType>
            <xs:element   name="say_hello"   type="tns:say_hello" />
            <xs:element   name="say_helloResponse"  
                type="tns:say_helloResponse" />
        </xs:schema>
    </wsdl:types>
    <wsdl:message   name="say_hello">
        <wsdl:part   name="say_hello"   element="tns:say_hello" />
    </wsdl:message>
    <wsdl:message   name="say_helloResponse">
        <wsdl:part   name="say_helloResponse"  
            element="tns:say_helloResponse" />
    </wsdl:message>
    <wsdl:portType   name="Application">
        <wsdl:operation   name="say_hello"   parameterOrder="say_hello">
            <wsdl:input   name="say_hello"   message="tns:say_hello" />
            <wsdl:output   name="say_helloResponse"  
                message="tns:say_helloResponse" />
        </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding   name="Application"   type="tns:Application">
        <soap:binding   style="document"  
            transport="http://schemas.xmlsoap.org/soap/http" />
        <wsdl:operation   name="say_hello">
            <soap:operation   soapAction="say_hello"   style="document" />
            <wsdl:input   name="say_hello">
                <soap:body   use="literal" />
            </wsdl:input>
            <wsdl:output   name="say_helloResponse">
                <soap:body   use="literal" />
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:service   name="Application">
        <wsdl:port   name="Application"   binding="tns:Application">
            <soap:address   location="http://10.2.70.10:7789/SOAP/?wsdl" />
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>

WSDL 端口

<portType> 元素是最重要的 WSDL 元素。

它可描述一個 web service、可被執行的操作,以及相關的消息。可以把 <portType> 元素比作傳統編程語言中的一個函數庫(或一個模塊、或一個類)。

WSDL 消息

<message> 元素定義一個操作的數據元素。

每個消息均由一個或多個部件組成。可以把這些部件比作傳統編程語言中一個函數調用的參數。

WSDL types

<types> 元素定義 web service 使用的數據類型。

爲了最大程度的平臺中立性,WSDL 使用 XML Schema 語法來定義數據類型。

WSDL Bindings

<binding> 元素爲每個端口定義消息格式和協議細節。

 

對於接口來說,接口文檔非常重要,它描述如何訪問接口。那麼WSDL就可以看作Web Service接口的一種標準格式的“文檔”。我們通過閱讀WSDL就知道如何調用Web Service接口了。


7、UDDI

Universal Description, Discovery and Integration",可譯爲通用描述、發現與集成服務,簡稱UDDI

WSDL用來描述了訪問特定的 Web Service的一些相關的信息,那麼在互聯網上,或者是在企業的不同部門之間,如何來發現我們所需要的 Web Service呢?而 Web Service提供商又如何將自己開發的 Web Serivce公佈到因特網上呢?這就需要使用到 UDDI 了。

UDDI 是一個獨立於平臺的框架,用於通過使用 Internet 來描述服務,發現企業,並對企業服務進行集成。

UDDI 指的是通用描述、發現與集成服務

UDDI 是一種用於存儲有關 web services 的信息的目錄。

UDDI 是一種由 WSDL 描述的 web services 界面的目錄。

UDDI 經由 SOAP 進行通信

UDDI可以幫助 Web 服務提供商在互聯網上發佈 Web services的信息。UDDI 是一種目錄服務,企業可以通過 UDDI 來註冊和搜索 Web services。

Web Services體系結構 

Web Serivce的體系結構中涉及到三個角色,一個是 Web Service提供者,一個是 Web Service中介,還有一個就是 Web Service請求者;同時還涉及到三類動作,即發佈,查找,綁定,

  Web Service提供者:

可以發佈 Web Service,並且對使用自身服務的請求進行響應,Web Service的擁有者,它會等待其他的服務或者是應用程序訪問自己。

  Web Service請求者:

也就是 Web Service功能的使用者,它通過服務註冊中心也就是 Web Service中介者查找到所需要的服務,再利用 SOAP 消息向 Web Service提供者發送請求以獲得服務。

  Web Service中介:

也稱爲服務代理,用來註冊已經發布的 Web Service提供者,並對其進行分類,同時提供搜索服務,簡單來說的話,Web Service中介者的作用就是把一個 Web Service請求者和合適的 Web Service提供者聯繫在一起,充當一個管理者的角色,一般是通過 UDDI來實現。

發佈:

通過發佈操作,可以使 Web Serivce提供者向 Web Service中介註冊自己的功能以及訪問的接口。

發現(查找):

使得 Web Service請求者可以通過 Web Service中介者來查找到特定種類的 Web Service 接口。

綁定:

這裏就是實現讓Web Serivce請求者能夠使用Web Serivce提供者提供的Web Serivce接口。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章