這實際上是三個問題,從WebService到今天流行的RESTful API(JSON) over HTTP,經歷了數次變革
1 WebService有很多協議,為什么HTTP比較流行?
WebService是個很重型的規范,它的應用協議是SOAP(簡單對象訪問協議),它所依賴的下層通信方式不單單是HTTP,也有SOAP over SMTP, SOAP over TCP,由於HTTP協議群眾基礎廣,開發調試方便,所以,成了WebService中最為流行的方式。
甚至很多公司在內網通信,也用HTTP來做,比如,應用調用搜索引擎,Solr就是一個例子。
但HTTP也是TCP上性能比較差的協議,因為HTTP是基於TCP的,有3次握手,再加上HTTP是個文本傳輸協議(雖然也可以傳二進制的附件, 但業務邏輯還是文本用的多),又有很多復雜的HEADER。所以人們發明了一些更高效的通信協議來做遠程調用,比如ACE、ICE、Corba、淘寶的 HSF,但這是后話了,不展開細說。你只要知道,HTTP之所以流行,乃是簡單易用群眾基礎廣的結果。
2 WebService為什么不如RESTful API流行
WebService誕生十幾年了,最初是IBM、微軟比較熱心在推,一直也不溫不火。倒是XML-RPC, RESTful以及比RESTful還要簡陋的遠程調用方式后來居上。感覺是不是有點像民間的Spring干掉官方的EJB?
究其原因,還是WebService實在太笨重了,SOAP信封猶如婆娘的裹腳布,又臭又長,廣大開發人員是叔可忍嫂不能忍,於是就有了簡化版的, 叫XML-RPC,后來伴隨着Web2.0流行,RESTful獨領風騷。我在10年前做過一個產品,純PHP+JS,標准的WebService,連 WSDL我都要專門寫個PHP程序來生成,還好只是我一個人開發,要是團隊協作,我早就被罵得不成人形了。
再后來,連RESTful都被嫌棄了,大伙兒干脆連PUT、DELETE都懶得用,直接用GET和POST。
同時,我得說,這只是在互聯網領域,大部分企業的業務邏輯相對簡單,同時工期又變態的短(就像大部分互聯網創業公司用糙快猛的PHP,而不用相對嚴 謹的Java一樣)。在某些業務復雜,穩定性和正確性要求高的領域(如ERP、電商、支付),WebService還有是用武之地的。
3 為什么JSON比XML流行
還是易用性,JSON的可讀性比XML強幾條長安街,解析規則也簡單許多。XML解析的時候規則太多了,動不動就非法字符,動不動就拋異常。這對追求高開發速度和低開發門檻的企業來說,是個致命傷。
JSON的缺點是數據類型支持較少,且不精確。比方說:
price:12580
在json里,你無法知道這個價格是int, float還是double。
所以,如上面第二條所述,在一些業務要求較高的領域,還是XML更合適。
最后說一下性能,JSON的性能高於XML,除此之外,基於XML和HTTP的WebService, 基於JSON的RESTful API,並沒有性能差異。
XML性能糟糕到什么地步呢,有一種專門的CPU叫做XML Accelerator,專門為XML解析提供硬件加速。