1. 程式人生 > >為什麼很多第三方介面,都改成了基於http,直接傳遞json資料的方式來代替webservice?

為什麼很多第三方介面,都改成了基於http,直接傳遞json資料的方式來代替webservice?

問題:

曾經不同系統間互動問題時,總是優先考慮webserivce,現在看到除了一些老牌的公司,比如 amazonk 對眾的介面還是webservice的方 式,其他很多國內新專案的介面都開始轉向直接傳 JSON  的方式。我知道的優勢之一,就是webservice的訊息體肯定比json這種方式要大。請問, 除此之外,設計這些對眾介面的時候,還有什麼其他的考慮嗎?

回答:

這實際上是三個問題,從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都被嫌棄了,大夥兒乾脆連PUTDELETE都懶得用,直接用GETPOST

同時,我得說,這只是在網際網路領域,大部分企業的業務邏輯相對簡單,同時工期又變態的短(就像大部分網際網路創業公司用糙快猛的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解析提供硬體加速。