數(shù)據(jù)傳輸,數(shù)據(jù)調(diào)用中的那些常用方式
在互聯(lián)網(wǎng)和物聯(lián)網(wǎng)高度發(fā)達(dá)的今天,似乎一切都可以連接起來(lái),而彼此連接通訊的方式就是API,而對(duì)于API,有很多種方式進(jìn)行數(shù)據(jù)的傳輸,今天我們就來(lái)說(shuō)一說(shuō)API通信的演變過(guò)程。
SOAP
它的全稱叫做簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議,它是最早人們用來(lái)進(jìn)行數(shù)據(jù)傳輸?shù)耐ㄓ崊f(xié)議,它通過(guò)xml定義了服務(wù)調(diào)用的參數(shù)和類型,定義了正文格式,定義了響應(yīng)方式, 它可以通過(guò)http協(xié)議進(jìn)行傳輸,也可以通過(guò)smtp協(xié)議或者tcp協(xié)議進(jìn)行傳輸,因?yàn)閤ml的冗長(zhǎng),在消息過(guò)多的時(shí)候,它的傳輸數(shù)據(jù)會(huì)大大增加。
因此,soap這種數(shù)據(jù)傳輸方式已經(jīng)逐漸被歷史舞臺(tái)所淘汰。
JSON
在xml格式冗余數(shù)據(jù)過(guò)多的時(shí)候,人們發(fā)現(xiàn)json數(shù)據(jù)格式可以傳輸更多的信息,并且json被很多編程語(yǔ)言所支持,因此,越來(lái)越多的api采用json數(shù)據(jù)格式來(lái)對(duì)外提供服務(wù)。
可以說(shuō)現(xiàn)在開放的第三方api,一定會(huì)提供json的接口數(shù)據(jù)格式,當(dāng)然,有些第三方也會(huì)在支付接口中返回xml的數(shù)據(jù)通訊格式。
REST
rest全稱是資源表現(xiàn)形式的狀態(tài)變化,它是一種架構(gòu)風(fēng)格,用來(lái)約束資源的查找和定位。
它不是數(shù)據(jù)的傳輸格式,它也不是單單約束數(shù)據(jù)的傳輸格式,它約束的是資源的狀態(tài)改變方式,它把一切都看成資源。
這里的表現(xiàn)形式指的是json,xml或者h(yuǎn)tml任何數(shù)據(jù)格式,包括圖片格式。
狀態(tài)變化指的是通過(guò)GET,POST,DELETE,PUT等動(dòng)作來(lái)修改它的狀態(tài),使它的狀態(tài)增加,減少,被刪除等。
REST 提供的是一個(gè)無(wú)狀態(tài)的服務(wù),它不會(huì)記錄訪問(wèn)者的上次訪問(wèn)狀態(tài)。
雖然很多問(wèn)題可以被rest來(lái)解決,比如交易映射,增刪改查映射,文檔映射,但是還是有很多情況下,rest無(wú)法使用所有的映射情況。
GRPC
gRPC 是來(lái)自 Google 的現(xiàn)代輕量級(jí)通信協(xié)議。它主要是用來(lái)解決遠(yuǎn)程過(guò)程調(diào)用的問(wèn)題。
在分布式系統(tǒng)中,各個(gè)系統(tǒng)經(jīng)常需要調(diào)用其它系統(tǒng)的服務(wù),除了通過(guò)http接口方式進(jìn)行調(diào)用之外,還有其它的調(diào)用方式,gRPC就是其中的一種。
它是非常有效的一種方法,它利用了 HTTP/2 的特性,解決了同步發(fā)送問(wèn)題,它可以進(jìn)行廣播發(fā)送,也可以實(shí)現(xiàn)多路復(fù)用,通過(guò)一個(gè)連接,它可以傳輸更多的消息。
它采用的是二進(jìn)制的數(shù)據(jù)格式,相比于json,xml等文本格式,它大大縮小了數(shù)據(jù)傳輸?shù)捏w積,同樣的帶寬可以更快更多地傳輸消息。
GraphQL
GraphQL 是一種針對(duì) Graph(圖狀數(shù)據(jù))進(jìn)行查詢特別有優(yōu)勢(shì)的 Query Language(查詢語(yǔ)言),所以叫做 GraphQL。
GraphQL 是 Facebook 發(fā)明的,它為查詢api提供了另一種方式,可以通過(guò)一個(gè)接口,根據(jù)不同的查詢條件,返回不同的數(shù)據(jù)。
GraphQL 允許您在單個(gè)查詢中詢問(wèn)您想要的內(nèi)容,從而節(jié)省帶寬并減少瀑布式請(qǐng)求。它還使客戶端能夠請(qǐng)求他們自己獨(dú)特的數(shù)據(jù)規(guī)范。
API 開發(fā)人員使用 GraphQL 創(chuàng)建一個(gè)模式來(lái)描述客戶端可以通過(guò)該服務(wù)查詢的所有可能的數(shù)據(jù)。GraphQL 模式由對(duì)象類型組成,這些類型定義了您可以請(qǐng)求哪種類型的對(duì)象以及它具有哪些字段。當(dāng)查詢進(jìn)來(lái)時(shí),GraphQL 會(huì)根據(jù)架構(gòu)驗(yàn)證查詢。
GraphQL 查詢不僅能夠獲得資源的屬性,還能沿著資源間引用進(jìn)一步查詢。典型的 REST API 請(qǐng)求多個(gè)資源時(shí)得載入多個(gè) URL,而 GraphQL 可以通過(guò)一次請(qǐng)求就獲取你應(yīng)用所需的所有數(shù)據(jù)。這樣一來(lái),即使是比較慢的移動(dòng)網(wǎng)絡(luò)連接下,使用 GraphQL 的應(yīng)用也能表現(xiàn)得足夠迅速。
總結(jié)
在萬(wàn)物互聯(lián)的時(shí)代,人們總是必不可少地需要跟第三方接口打交道,或者是向第三方提供接口服務(wù),我們總是希望我們的程序可以更快,更高效,更便捷,因此開發(fā)人員不斷研發(fā)和改進(jìn)技術(shù),未來(lái)的接口服務(wù)不是第三方提供什么服務(wù)來(lái)給用戶使用,而是用戶想要什么數(shù)據(jù)就可以從第三方調(diào)取。