WebService基本介紹

什麼是WebService?

W3C組織對其的定義如下,它是一個軟件系統,爲了支持跨網絡的機器間相互操作交互而設計。Web Service服務通常被定義爲一組模塊化的API,它們可以通過網絡進行調用,來執行遠程系統的請求服務。

簡單的說:WebService即Web服務,它是一種跨編程語言和跨操作系統平臺的遠程調用技術。

所謂跨編程語言和跨操作平臺,就是說服務端程序採用Java編寫,客戶端程序則可以採用其他編程語言編寫,反之亦然!跨操作系統平臺則是指服務端程序和客戶端程序可以在不同的操作系統上運行。

所謂遠程調用,就是一臺計算機a上的一個程序可以調用到另外一臺計算機b上的一個對象的方法。譬如從天氣預報系統中獲取某個城市的天氣數據在自己系統中進行展示;從證券交易系統中獲取某隻股票的交易信息在自己的系統中進行展示;又譬如一個商城系統中能夠展示快遞的跟蹤信息,而這些信息就是通過webservice從具體的快遞公司的系統中獲取的數據。

其實可以從多個角度來理解WebService,從表面上看,WebService就是一個應用程序向外界暴露出一個能通過Web進行調用的API,也就是說能用編程的方法通過Web來調用這個應用程序。我們把調用這個WebService的應用程序叫做客戶端,而把提供這個WebService的應用程序叫做服務端。從深層次看,WebService是建立可互操作的分佈式應用程序的新平臺,是一個平臺,是一套標準。它定義了應用程序如何在Web上實現互操作性,你可以用任何你喜歡的語言,在任何你喜歡的平臺上寫Web service ,只要我們可以通過Web service標準對這些服務進行查詢和訪問。


Web Service = SOAP + HTTP + WSDL。其中,SOAP Simple Object Access Protocol)協議是web service的主體,它通過HTTP或者SMTP等應用層協議進行通訊,自身使用XML文件來描述程序的函數方法和參數信息,從而完成不同主機的異構系統間的計算服務處理。這裏的WSDL(Web Services Description Language)web 服務描述語言也是一個XML文檔,它通過HTTP向公衆發佈,公告客戶端程序關於某個具體的 Web service服務的URL信息、方法的命名,參數,返回值等。

基本概念

WebService三要素

SOAP (Simple Object Access Protocol):簡易對象訪問協議,soap用來描述傳遞信息的格式。

WSDL (WebServices Description Language):Web服務描述語言,用來描述WebService、以及如何訪問WebService

UDDI (Universal Description Discovery and Integration):通用描述、發現及整合,用來管理、分發、

查詢webService。

WSDL是什麼,有什麼作用?WSDL文檔主要有那幾部分組成,分別有什麼作用?

WSDLweb service definition language的縮寫,即web service的定義(描述)語言。

怎樣向別人介紹你的 web service 有什麼功能,以及每個函數調用時的參數呢?你可能會自己寫一套文檔,你甚至可能會口頭上告訴需要使用你的web service的人。這些非正式的方法至少都有一個嚴重的問題:當程序員坐到電腦前,想要使用你的web service的時候,他們的工具(如Visual Studio)無法給他們提供任何幫助,因爲這些工具根本就不瞭解你的web service。解決方法是:用機器能閱讀的方式提供一個正式的描述文檔。web service描述語言(WSDL)就是這樣一個基於XML的語言,用於描述web service及其函數、參數和返回值。因爲是基於XML的,所以WSDL既是機器可閱讀的,又是人可閱讀的,這將是一個很大的好處。一些最新的開發工具既能根據你的web service生成WSDL文檔,又能導入WSDL文檔,生成調用相應web service的代碼。

Webservice服務發佈之後,通過瀏覽器訪問發佈的+?wsdl即可獲得wsdl文檔。

一個WSDL文檔的根元素是definitions元素,WSDL文檔包含7個重要的元素:types, import, message, portType, operations, bindingservice元素。

1、 definitions元素中一般包括若干個XML命名空間;

2、 Types元素用作一個容器,定義了自定義的特殊數據類型,在聲明消息部分(有效負載)的時候,messages定義使用了types元素中定義的數據類型與元素;

3、 Import元素可以讓當前的文檔使用其他WSDL文檔中指定命名空間中的定義;

4、 Message元素描述了Web服務的有效負載。相當於函數調用中的參數和返回值;

5、 PortType元素定義了Web服務的抽象接口,它可以由一個或者多個operation元素,每個operation元素定義了一個RPC樣式或者文檔樣式的Web服務方法;

6、 Operation元素要用一個或者多個messages消息來定義它的輸入、輸出以及錯誤;

7、 Binding元素將一個抽象的portType映射到一組具體的協議(SOAP或者HTTP)、消息傳遞樣式(RPC或者document)以及編碼樣式(literal或者SOAP encoding);

8、 Service元素包含一個或者多個Port元素

每一個Port元素對應一個不同的Web服務,port將一個URL賦予一個特定的binding,通過location實現。
可以使兩個或者多個port元素將不同的URL賦給相同的binding

SOAP是什麼?

SOAPsimple object access protocal的縮寫,即簡單對象訪問協議。 是基於XMLHTTP的一種通信協議。是webservice所使用的一種傳輸協議,webservice之所以能夠做到跨語言和跨平臺,主要是因爲XMLHTTP都是獨立於語言和平臺的。Soap的消息分爲請求消息和響應消息,一條SOAP消息就是一個普通的XML文檔,包含下列元素:

1、 必需的 Envelope 元素,可把此XML文檔標識爲一條SOAP消息

2、 可選的 Header 元素,包含頭部信息

3、 必需的 Body 元素,包含所有的調用和響應信息

4、 可選的 Fault 元素,提供有關在處理此消息所發生錯誤的信息

Soap請求消息 

Soap響應消息 

怎麼理解UDDI

UDDIUniversal Description Discovery and Integration的縮寫,即統一描述、發現和整合規範。用來註冊和查找服務,把web services收集和存儲起來,這樣當別人訪問這些信息的時候就從UDDI中查找,看有沒有這個信息存在。

WebserviceSEI指什麼?

WebService EndPoint Interfacewebservice終端[Server]接口)就是 WebService服務器端用來處理請求的接口

SOA和Web service的區別是什麼?

SOA是一種軟件設計準則,一種實現鬆耦合,高可複用性和粗粒度的web服務的設計模式。開發者可以選擇任意協議實現SOA,例如,HTTP、HTTPS、JMS、SMTP、RMI、IIOP(例如,採用IIOP的EJB)、RPC等。消息可以採用XML或者數據傳輸對象(Data Transfer Objects,DTOs)。

Web Service是實現SOA的技術之一。也可以不用Web service來實現SOA應用:例如,用一些傳統的技術,像Java RMI,EJB,JMS消息等。但是Web service提供的是標準的平臺無關的服務,這些服務採用HTTP、XML、SOAP、WSDL和UDDI技術,因此可以帶來J2EE和.NET這些異構技術(heterogeneous technologies)之間的互操作性。

Java開發WebService最重要的兩個規範:
JSR-224 (JAX-WS:Java API for XML-Based Web Services ) ,主要使用soap協議,使用wsdl來描述;

JSR-311 (JAX-RS:The Java API for RESTful Web Services),使用wadl描述;





JAX-WS是針對WebService。而JAX-RS是針對RESTful HTTP Service

JAX-WS是面向消息的,每次請求的時候指定了請求的方法。JAX-RS是面向資源的。後則將網絡上的東西當做一種資源,每次請求都是對該資源進行操作,比如對資源的增刪查改。

SOAP WS 和RESTful Web Service之間有什麼不同呢?

  • SOAP WS支持既遠程過程調用(例如,RPC)又支持消息中間件(MOM)方式進行應用集成。而Restful Web Service僅支持RPC集成方式。
  • SOAP WS是傳輸協議無關的。它支持多種協議,比如,HTTP(S)、 Messaging、TCP、UDP SMTP等等。而REST是協議相關的,只支持HTTP或者HTTPS協議。
  • SOAP WS僅允許使用XML數據格式。定義的操作通過POST請求發送。其重點是通過操作名來獲取服務,並將應用邏輯封裝爲服務。而REST方式則允許多種數據格式,例如,XML、JSON、文本、HTML等等。而且由於REST方式採用標準GET、PUT、PSOT和DELETE 方法,因此所有的瀏覽器都可以支持。其重點是通過資源名來獲取服務,並將數據封裝爲服務。AJAX支持REST方式,它可以使用XMLHttpRequest對象。無狀態CRUD操作(創建、讀、更新和刪除)更加適合這種方式。

GET – represent()

POST – acceptRepresention()

PUT – storeRepresention()

DELETE – removeRepresention()

  • 無法緩存SOAP方式讀取的內容。而REST方式的則可以,而且性能和可擴展性都更好一些。
  • SOAP WS支持SSL和WS-security,針對企業級應用可以有更多的安全保障,例如按需提升安全指數、通過第三方來保證身份認證信息的安全性、除了點到點SSL(point to point SSL)之外,更針對消息的不同部分來提供不同的保密算法等等。而REST只支持點到點SSL。而且無論是不是敏感消息,SSL都會加密整條消息。
  • SOAP對於基於ACID的短壽命事務管理以及基於補償事務管理的長壽命事務有深入的支持。同時,SOAP也支持分佈式事務(譯者:在一個分佈式環境中涉及到多個資源管理器的事務)的兩階段提交(two-phase commit)方式。而REST由於基於HTTP協議,因此對於事務處理既不兼容ACID方式也不提供分佈式事務的兩階段提交方式。
  • 即便是要通過SOAP的第三方程序,SOAP通過內置的重試邏輯也可以提供端到端可靠性。REST沒有一個標準的消息系統,因而寄希望於客戶通過重連去解決通信失敗問題。

 如何選擇採用哪種Web service?SOAP WS還是REST?

一般而言,基於REST的Web service的優勢在於其簡單、性能不錯、可擴展性好,並且也支持多種數據格式。而SOAP則適用於安全性和事務處理可靠性方面要求比較高的服務中。

考慮依據是設計者對功能性和非功能性需求的要求:

  • 所提供的服務會暴露數據或者業務邏輯嗎?(如果會暴露數據的話可以選擇REST方式,如果會暴露業務邏輯的話可以選擇SOAP WS)。客戶或者服務提供商需要一個正式的契約(contract)嗎?(SOAP可以通過WSDL(Web Service Description Language)提供一個正式契約)
  • 需要支持多種數據格式嗎?
  • 需要進行AJAX調用嗎?(REST可以採用XMLHttpRequest來發送AJAX調用)
  • 同步調用還是異步調用?
  • 有狀態調用還是無狀態調用?(REST適合無狀態CRUD操作)
  • 對於安全性的要求?(SOAP WS對於安全性的支持更好些)
  • 對於事務處理的要求?(SOAP WS這方面更有優勢)
  • 有帶寬限制嗎?(SOAP消息比較冗長)
  • 哪種方式更適合開發者呢呢?(REST更好實現,也更好測試和維護)

常見的Webservice框架,他們都有什麼特點?

Webservice常用框架有JWS、Axis2、XFire以及CXF(JAX-WS)。

1、JWS是Java語言對WebService服務的一種實現,用來開發和發佈服務。而從服務本身的角度來看JWS服務是沒有語言界限的。但是Java語言爲Java開發者提供便捷發佈和調用WebService服務的一種途徑。
2、Axis2是Apache下的一個重量級WebService框架,準確說它是一個Web Services / SOAP / WSDL 的引擎,是WebService框架的集大成者,它能不但能製作和發佈WebService,而且可以生成Java和其他語言版WebService客戶端和服務端代碼。這是它的優勢所在。但是,這也不可避免的導致了Axis2的複雜性,使用過的開發者都知道,它所依賴的包數量和大小都是很驚人的,打包部署發佈都比較麻煩,不能很好的與現有應用整合爲一體。但是如果你要開發Java之外別的語言客戶端,Axis2提供的豐富工具將是你不二的選擇。
3、XFire是一個高性能的WebService框架,在Java6之前,它的知名度甚至超過了Apache的Axis2,XFire的優點是開發方便,與現有的Web整合很好,可以融爲一體,並且開發也很方便。但是對Java之外的語言,沒有提供相關的代碼工具。XFire後來被Apache收購了,原因是它太優秀了,收購後,隨着Java6 JWS的興起,開源的WebService引擎已經不再被看好,漸漸的都敗落了。
4、CXF是Apache旗下一個重磅的SOA簡易框架,它實現了ESB(企業服務總線)。CXF來自於XFire項目,經過改造後形成的,就像目前的Struts2來自WebWork一樣。可以看出XFire的命運會和WebWork的命運一樣,最終會淡出人們的視線。CXF不但是一個優秀的Web Services / SOAP / WSDL 引擎,也是一個不錯的ESB總線,爲SOA的實施提供了一種選擇方案,當然他不是最好的,它僅僅實現了SOA架構的一部分。
注:對於Axis2與CXF之間的關係,一個是Axis2出現的時間較早,而CXF的追趕速度快。

如何抉擇: 
1、如果應用程序需要多語言的支持,Axis2應當是首選了;
2、如果應用程序是遵循 spring哲學路線的話,Apache CXF是一種更好的選擇,特別對嵌入式的Web Services來說;
3、如果應用程序沒有新的特性需要的話,就仍是用原來項目所用的框架,比如 Axis1,XFire,Celtrix或BEA等等廠家自己的Web Services實現,就別勞民傷財了。

支持JAX-RS服務規範的框架有:

1.CXF——XFireCeltix的合併 

2.Jersey——Sun公司的JAX-RS參考實現。

3.RESTEasy——JBossJAX-RS項目。 

4.Restlet——也許是最早的REST框架了,它JAX-RS之前就有了。

WebService常用的兩種實現:CXF和Axis2

具體參見:Web Service工作原理及實例


RESTful WebService CXF框架開發例子:RESTful WebService和web service的區別

jersey的例子:使用Java創建RESTful Web Service

https://www.jianshu.com/p/2fc9f900c1e4



發佈了28 篇原創文章 · 獲贊 29 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章