為什麼很多第三方介面,都改成了基於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
甚至很多公司在內網通訊,也用 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解析提供硬體加速。