php webservice是個(gè)很重型的規(guī)范,它的應(yīng)用協(xié)議是SOAP,它所依賴的下層通信方式不只是HTTP,也有SOAP over SMTP、SOAP over TCP,且HTTP協(xié)議群眾基礎(chǔ)廣,開(kāi)發(fā)調(diào)試方便。
推薦:《PHP視頻教程》
提到php的webservice。之前還是比較陌生的,因?yàn)榻佑|的少呀,幾乎在所有的公司中沒(méi)用過(guò),僅僅用過(guò)的一次好像是接入一個(gè)第三方的短信通道,用的是SOAP|WSDL。
一個(gè)很極端的話“webservice”已經(jīng)過(guò)時(shí)了一點(diǎn)不假:
1 WebService有很多協(xié)議,為什么HTTP比較流行?
WebService是個(gè)很重型的規(guī)范,它的應(yīng)用協(xié)議是SOAP(簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議),它所依賴的下層通信方式不單單是HTTP,也有SOAP over SMTP, SOAP over TCP,由于HTTP協(xié)議群眾基礎(chǔ)廣,開(kāi)發(fā)調(diào)試方便,所以,成了WebService中最為流行的方式。
甚至很多公司在內(nèi)網(wǎng)通信,也用HTTP來(lái)做,比如,應(yīng)用調(diào)用搜索引擎,Solr就是一個(gè)例子。
但HTTP也是TCP上性能比較差的協(xié)議,因?yàn)镠TTP是基于TCP的,有3次握手,再加上HTTP是個(gè)文本傳輸協(xié)議(雖然也可以傳二進(jìn)制的附件,但業(yè)務(wù)邏輯還是文本用的多),又有很多復(fù)雜的HEADER。所以人們發(fā)明了一些更高效的通信協(xié)議來(lái)做遠(yuǎn)程調(diào)用,比如ACE、ICE、Corba、淘寶的HSF,但這是后話了,不展開(kāi)細(xì)說(shuō)。你只要知道,HTTP之所以流行,乃是簡(jiǎn)單易用群眾基礎(chǔ)廣的結(jié)果。
2 WebService為什么不如RESTful API流行
WebService誕生十幾年了,最初是IBM、微軟比較熱心在推,一直也不溫不火。倒是XML-RPC, RESTful以及比RESTful還要簡(jiǎn)陋的遠(yuǎn)程調(diào)用方式后來(lái)居上。感覺(jué)是不是有點(diǎn)像民間的Spring干掉官方的EJB?
究其原因,還是WebService實(shí)在太笨重了,SOAP信封猶如婆娘的裹腳布,又臭又長(zhǎng),廣大開(kāi)發(fā)人員是叔可忍嫂不能忍,于是就有了簡(jiǎn)化版的,叫XML-RPC,后來(lái)伴隨著Web2.0流行,RESTful獨(dú)領(lǐng)風(fēng)騷。我在10年前做過(guò)一個(gè)產(chǎn)品,純PHP+JS,標(biāo)準(zhǔn)的WebService,連WSDL我都要專(zhuān)門(mén)寫(xiě)個(gè)PHP程序來(lái)生成,還好只是我一個(gè)人開(kāi)發(fā),要是團(tuán)隊(duì)協(xié)作,我早就被罵得不成人形了。
再后來(lái),連RESTful都被嫌棄了,大伙兒干脆連PUT、DELETE都懶得用,直接用GET和POST。
同時(shí),我得說(shuō),這只是在互聯(lián)網(wǎng)領(lǐng)域,大部分企業(yè)的業(yè)務(wù)邏輯相對(duì)簡(jiǎn)單,同時(shí)工期又變態(tài)的短(就像大部分互聯(lián)網(wǎng)創(chuàng)業(yè)公司用糙快猛的PHP,而不用相對(duì)嚴(yán)謹(jǐn)?shù)腏ava一樣)。在某些業(yè)務(wù)復(fù)雜,穩(wěn)定性和正確性要求高的領(lǐng)域(如ERP、電商、支付),WebService還有是用武之地的。
3 為什么JSON比XML流行
還是易用性,JSON的可讀性比XML強(qiáng)幾條長(zhǎng)安街,解析規(guī)則也簡(jiǎn)單許多。XML解析的時(shí)候規(guī)則太多了,動(dòng)不動(dòng)就非法字符,動(dòng)不動(dòng)就拋異常。這對(duì)追求高開(kāi)發(fā)速度和低開(kāi)發(fā)門(mén)檻的企業(yè)來(lái)說(shuō),是個(gè)致命傷。
JSON的缺點(diǎn)是數(shù)據(jù)類(lèi)型支持較少,且不精確。比方說(shuō):
price:12580
在json里,你無(wú)法知道這個(gè)價(jià)格是int, float還是double。
所以,如上面第二條所述,在一些業(yè)務(wù)要求較高的領(lǐng)域,還是XML更合適。
最后說(shuō)一下性能,JSON的性能高于XML,除此之外,基于XML和HTTP的WebService, 基于JSON的RESTful API,并沒(méi)有性能差異。
XML性能糟糕到什么地步呢,有一種專(zhuān)門(mén)的CPU叫做XML Accelerator,專(zhuān)門(mén)為XML解析提供硬件加速。