github:https://ptteng.github.io/PPT/PPT-java/Java-task2-webservice.html#/
什么是WEBService,實現WEBService有哪些框架,為什么WEBService經常被認為太重了,只有銀行和大型國企才會使用的更多有一些?
什么是webservice
Web service是一個平臺獨立的,低耦合的,自包含的、基于可編程的web的應用程序,可使用開放的XML(標準通用標記語言下的一個子集)標準來描述、發布、發現、協調和配置這些應用程序,用于開發分布式的互操作的應用程序。
webservice分類
在SOA的基礎技術實現方式中WebService占據了很重要的地位,通常我們提到WebService第一想法就是SOAP消息在各種傳輸協議上交互。近幾年REST的思想伴隨著SOA逐漸被大家接受,同時各大網站不斷開放API提供給開發者,也激起了REST風格WebService的熱潮。
基于soap的webservice
其實SOAP最早是針對RPC的一種解決方案,簡單對象訪問協議,很輕量,同時作為應用協議可以基于多種傳輸協議來傳遞消息(Http,SMTP等)。但是隨著SOAP作為WebService的廣泛應用,不斷地增加附加的內容,使得現在開發人員覺得SOAP很重,使用門檻很高。在SOAP后續的發展過程中,WS-*一系列協議的制定,增加了SOAP的成熟度,也給SOAP增加了負擔。
rest式的webservice
REST其實并不是什么協議也不是什么標準,而是將Http協議的設計初衷作了詮釋,在Http協議被廣泛利用的今天,越來越多的是將其作為傳輸協議,而非原先設計者所考慮的應用協議。SOAP類型的WebService就是最好的例子,SOAP消息完全就是將Http協議作為消息承載,以至于對于Http協議中的各種參數(例如編碼,錯誤碼等)都置之不顧。其實,最輕量級的應用協議就是Http協議。對于各種資源的操作最后總是能抽象成為這四種基本操作,在定義了定位資源的規則以后,對于資源的操作通過標準的Http協議就可以實現,開發者也會受益于這種輕量級的協議。
restful不一定就要用json,xml同樣可以,不過是類似去掉header的soap webservice。要注意的是,就算是restful,大多數公司也沒有完全遵守,而且在復雜的業務接口設計下,要通過RUCD來抽象所有的接口作為資源基本是不實際的。很多公司只是套了個rest的殼子,自己在內部實現了別的協議,所以只要能達到目的,無論是基于soap的還是restful的webservice,并不一定都是涇渭分明的。
那該如何選擇?
REST對于資源型服務接口來說很合適,同時特別適合對于效率要求很高,但是對于安全要求不高的場景。SOAP的成熟性可以給需要提供給多開發語言的,對于安全性要求較高的接口設計帶來便利。
總的來說,基于soap協議的webservice由于有歷史包袱,在安全性和擴展性上增強了很多,而且使用xml解析。相應地效率也不如rest式的。但restful的webservice速度雖然可以,但安全性上遠不如上一個。所以沒必要一定分是非高下,關鍵還是看應用場景。比如銀行國企自然走soap協議的,對安全要求不高的web項目自然去追求速度。
常用的webservice框架
如cfx、jwx、XFire與Axis2,jwx也就是jax-ws,是java6提供的對webservice的一種實現。cxf框架則簡化了服務發布過程。Axis與XFire已隨著技術不斷的更替慢慢落幕,而目前也只有axis2和cxf官方有更新,Axis與XFire都已不再更新。