github:https://ptteng.github.io/PPT/PPT-java/Java-task2-webservice.html#/
什么是WEBService漓糙,實(shí)現(xiàn)WEBService有哪些框架铣缠,為什么WEBService經(jīng)常被認(rèn)為太重了,只有銀行和大型國(guó)企才會(huì)使用的更多有一些兼蜈?
什么是webservice
Web service是一個(gè)平臺(tái)獨(dú)立的攘残,低耦合的,自包含的为狸、基于可編程的web的應(yīng)用程序歼郭,可使用開放的XML(標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言下的一個(gè)子集)標(biāo)準(zhǔn)來描述、發(fā)布辐棒、發(fā)現(xiàn)病曾、協(xié)調(diào)和配置這些應(yīng)用程序牍蜂,用于開發(fā)分布式的互操作的應(yīng)用程序。
webservice分類
在SOA的基礎(chǔ)技術(shù)實(shí)現(xiàn)方式中WebService占據(jù)了很重要的地位泰涂,通常我們提到WebService第一想法就是SOAP消息在各種傳輸協(xié)議上交互鲫竞。近幾年REST的思想伴隨著SOA逐漸被大家接受,同時(shí)各大網(wǎng)站不斷開放API提供給開發(fā)者逼蒙,也激起了REST風(fēng)格WebService的熱潮从绘。
基于soap的webservice
其實(shí)SOAP最早是針對(duì)RPC的一種解決方案,簡(jiǎn)單對(duì)象訪問協(xié)議是牢,很輕量僵井,同時(shí)作為應(yīng)用協(xié)議可以基于多種傳輸協(xié)議來傳遞消息(Http,SMTP等)。但是隨著SOAP作為WebService的廣泛應(yīng)用驳棱,不斷地增加附加的內(nèi)容批什,使得現(xiàn)在開發(fā)人員覺得SOAP很重,使用門檻很高社搅。在SOAP后續(xù)的發(fā)展過程中驻债,WS-*一系列協(xié)議的制定,增加了SOAP的成熟度形葬,也給SOAP增加了負(fù)擔(dān)合呐。
rest式的webservice
REST其實(shí)并不是什么協(xié)議也不是什么標(biāo)準(zhǔn),而是將Http協(xié)議的設(shè)計(jì)初衷作了詮釋荷并,在Http協(xié)議被廣泛利用的今天合砂,越來越多的是將其作為傳輸協(xié)議青扔,而非原先設(shè)計(jì)者所考慮的應(yīng)用協(xié)議源织。SOAP類型的WebService就是最好的例子,SOAP消息完全就是將Http協(xié)議作為消息承載微猖,以至于對(duì)于Http協(xié)議中的各種參數(shù)(例如編碼谈息,錯(cuò)誤碼等)都置之不顧。其實(shí)凛剥,最輕量級(jí)的應(yīng)用協(xié)議就是Http協(xié)議侠仇。對(duì)于各種資源的操作最后總是能抽象成為這四種基本操作,在定義了定位資源的規(guī)則以后犁珠,對(duì)于資源的操作通過標(biāo)準(zhǔn)的Http協(xié)議就可以實(shí)現(xiàn)逻炊,開發(fā)者也會(huì)受益于這種輕量級(jí)的協(xié)議。
restful不一定就要用json犁享,xml同樣可以余素,不過是類似去掉header的soap webservice。要注意的是炊昆,就算是restful桨吊,大多數(shù)公司也沒有完全遵守威根,而且在復(fù)雜的業(yè)務(wù)接口設(shè)計(jì)下,要通過RUCD來抽象所有的接口作為資源基本是不實(shí)際的视乐。很多公司只是套了個(gè)rest的殼子洛搀,自己在內(nèi)部實(shí)現(xiàn)了別的協(xié)議,所以只要能達(dá)到目的佑淀,無論是基于soap的還是restful的webservice留美,并不一定都是涇渭分明的。
那該如何選擇伸刃?
REST對(duì)于資源型服務(wù)接口來說很合適独榴,同時(shí)特別適合對(duì)于效率要求很高,但是對(duì)于安全要求不高的場(chǎng)景奕枝。SOAP的成熟性可以給需要提供給多開發(fā)語(yǔ)言的棺榔,對(duì)于安全性要求較高的接口設(shè)計(jì)帶來便利。
總的來說隘道,基于soap協(xié)議的webservice由于有歷史包袱症歇,在安全性和擴(kuò)展性上增強(qiáng)了很多,而且使用xml解析谭梗。相應(yīng)地效率也不如rest式的忘晤。但restful的webservice速度雖然可以,但安全性上遠(yuǎn)不如上一個(gè)激捏。所以沒必要一定分是非高下设塔,關(guān)鍵還是看應(yīng)用場(chǎng)景。比如銀行國(guó)企自然走soap協(xié)議的远舅,對(duì)安全要求不高的web項(xiàng)目自然去追求速度闰蛔。
常用的webservice框架
如cfx、jwx图柏、XFire與Axis2序六,jwx也就是jax-ws,是java6提供的對(duì)webservice的一種實(shí)現(xiàn)蚤吹。cxf框架則簡(jiǎn)化了服務(wù)發(fā)布過程例诀。Axis與XFire已隨著技術(shù)不斷的更替慢慢落幕,而目前也只有axis2和cxf官方有更新裁着,Axis與XFire都已不再更新繁涂。