導(dǎo)讀:在這份學(xué)習(xí)指南中,我們將和大家一起了解 REST、GraphQL 和異步 API 的優(yōu)缺點(diǎn),以及這三種技術(shù)在現(xiàn)實(shí)生活中的理想用例。

API 在現(xiàn)代軟件開發(fā)領(lǐng)域在發(fā)揮著舉足輕重的作用。

目前,有三種主流類型的API,可用于在各個(gè)系統(tǒng)之間建立通信與數(shù)據(jù)交換。最前沿最流行是 REST 方法,這種方法因其簡單和可擴(kuò)展性,已經(jīng)在行業(yè)中占據(jù)主導(dǎo)地位。

伴隨著技術(shù)的發(fā)展,開發(fā)者與企業(yè)的需求也發(fā)生著變化。近年來,由Facebook開源的 GraphQL 和異步事件驅(qū)動(dòng) API 等替代方案也開始出現(xiàn)。與傳統(tǒng)的 REST API 相比,它們具有更明顯的優(yōu)勢。

在本文中,我們將詳細(xì)研究每種 API 技術(shù),并將它們做比較和展開理解,希望對(duì)感興趣的小伙伴有些許幫助。

REST:面向資源的通信的開始

REST 架構(gòu)圍繞實(shí)體資源的概念展開。這些實(shí)體可通過標(biāo)準(zhǔn) HTTP 方法進(jìn)行管理,

例如 GET、POST、PUT 和 DELETE。

REST 的關(guān)鍵特征之一就是無狀態(tài),其中來自客戶端的每個(gè)請(qǐng)求都包含服務(wù)器完成該請(qǐng)求所需的所有信息。


這種方法可以將客戶端和服務(wù)器解耦,彼此可以獨(dú)立擴(kuò)展。

REST 的優(yōu)點(diǎn)與缺點(diǎn)

很明顯,REST API 具有如下的一些優(yōu)勢:

當(dāng)然,REST架構(gòu)也存在一些缺點(diǎn):

REST API 的用例

REST API 在如下用例中適合,以下我們舉例說明:

GraphQL:進(jìn)行聲明式數(shù)據(jù)獲取API的興起

GraphQL 是用于查詢數(shù)據(jù)的開源語言以及用于完成這些查詢的運(yùn)行時(shí)的組合。

GraphQL 背后的關(guān)鍵原則是采用分層結(jié)構(gòu)來定義數(shù)據(jù)查詢,讓客戶端在單個(gè)請(qǐng)求中精確指定所需的數(shù)據(jù)。

圖 2?GraphQL 架構(gòu)概覽

在很多方面,GraphQL 都是對(duì) REST API 架構(gòu)相關(guān)問題的直接對(duì)應(yīng)。?

而且它還促進(jìn)了API的強(qiáng)類型模式,為開發(fā)者提供了更清晰的預(yù)期。在技術(shù)改良方法,GraphQL 通過訂閱方式支持實(shí)時(shí)數(shù)據(jù)更新。

經(jīng)過多年的發(fā)展,創(chuàng)始者 Facebook以及眾多生態(tài)公司,比如在 GraphQL Federation 等工具上進(jìn)行了大量工作,從而使 GraphQL API 對(duì)于多個(gè)領(lǐng)域的大型企業(yè)系統(tǒng)具備更良好的可擴(kuò)展性。

GraphQL 的優(yōu)點(diǎn)與缺點(diǎn)

GraphQL 提供給開發(fā)者們?nèi)缦乱恍╆P(guān)鍵優(yōu)勢:

GraphQL 也有它的缺點(diǎn),包括如下的幾點(diǎn):

GraphQL 的相關(guān)用例

與 REST API 相比,GraphQL 在某些特定場合中表現(xiàn)的更好。例如:

異步 API:向事件驅(qū)動(dòng)架構(gòu)的轉(zhuǎn)變

近些年來,采用或遷移到云原生架構(gòu)的推動(dòng)催生了事件驅(qū)動(dòng)架構(gòu),其優(yōu)點(diǎn)是組件之間無阻塞通信的良好前景。

使用異步 API,客戶端無需等待響應(yīng)即可繼續(xù)操作,也就是可以發(fā)送請(qǐng)求的同時(shí)繼續(xù)執(zhí)行過程。

這種方法對(duì)于需要高并發(fā)性、可擴(kuò)展性和響應(yīng)性的場景是非常有利的。

在事件驅(qū)動(dòng)的系統(tǒng)中,異步 API 在Apache Kafka或RabbitMQ等工具的幫助下處理事件和消息,這些技術(shù)提供了消息生產(chǎn)者和消費(fèi)者之間的通信媒介。

典型使用事件驅(qū)動(dòng) API 方法的系統(tǒng)原理,先讓生產(chǎn)者將事件發(fā)布到主題,而消費(fèi)者訂閱這些主題,用以異步接收和處理事件。這樣允許無縫的可擴(kuò)展性和容錯(cuò)能力,因?yàn)樯a(chǎn)者和消費(fèi)者都可以獨(dú)立發(fā)展。

下圖就向大家展示了這樣一個(gè)系統(tǒng):

圖 3 具有 Kafka 和異步 API 的事件驅(qū)動(dòng)系統(tǒng)

異步 API 的優(yōu)點(diǎn)與缺點(diǎn)

異步 API 有如下的關(guān)鍵優(yōu)勢:

如同其它 API 類型一樣,異步 API 也存在以下幾個(gè)缺點(diǎn):

異步 API 的典型用例

REST 和 GraphQL API 兩種API類型相比,異步 API 也有一些合適的理想用例,包括如下:

REST、GraphQL 和異步 API 的綜合比較

前面我們已經(jīng)詳細(xì)研究了三種類型的 API 架構(gòu)。現(xiàn)在是時(shí)候?qū)λ鼈冞M(jìn)行并排綜合比較了,以便大家在開發(fā)前做出更好的決策與選擇。

下表顯示了三種類型幾個(gè)關(guān)鍵參數(shù)的比較:

表 1 比較 REST、GraphQL 與異步 API

范圍REST APIGraphQL API異步API
數(shù)據(jù)獲取方式使用預(yù)定義節(jié)點(diǎn)獲取數(shù)據(jù)客戶在查詢中指定確切的數(shù)據(jù)要求數(shù)據(jù)以異步消息的形式傳遞
性能和可擴(kuò)展性非常適合可擴(kuò)展的應(yīng)用;可能會(huì)遇到過度獲取和獲取不足的問題可擴(kuò)展;嵌套查詢可能會(huì)出現(xiàn)問題高度可擴(kuò)展;高效的實(shí)時(shí)數(shù)據(jù)處理
靈活性和易用性查詢數(shù)據(jù)的靈活性有限數(shù)據(jù)查詢靈活性高查詢數(shù)據(jù)的靈活性有限,需要了解事件驅(qū)動(dòng)的方法
開發(fā)者經(jīng)驗(yàn)和學(xué)習(xí)曲線資料完善且為許多開發(fā)者所熟悉理解 GraphQL 語法的學(xué)習(xí)曲線適中更陡峭的學(xué)習(xí)曲線
實(shí)時(shí)能力實(shí)時(shí)功能有限,依賴輪詢和 Webhooks 等關(guān)聯(lián)技術(shù)進(jìn)行更新通過訂閱實(shí)現(xiàn)實(shí)時(shí)功能專為實(shí)時(shí)數(shù)據(jù)處理而設(shè)計(jì);非常適合流媒體實(shí)時(shí)應(yīng)用
工具和生態(tài)系統(tǒng)支持豐富的工具和生態(tài)系統(tǒng)支持不斷發(fā)展的生態(tài)系統(tǒng)需要專門的工具,例如 RabbitMQ 或 Kafka 等消息傳遞平臺(tái)

結(jié)語

在本文中,我們共同探討了不同 API 架構(gòu)之間的主要區(qū)別,分別是:REST、GraphQL 與異步 API。

此外,還詳解了特定類型的 API 可能比其它類型更適合的場景。

展望未來,API 開發(fā)格局有望進(jìn)一步轉(zhuǎn)型,包括機(jī)器學(xué)習(xí)、邊緣計(jì)算和物聯(lián)網(wǎng)等新興技術(shù)將推動(dòng)新的需求,從而推動(dòng) API 方法的更快發(fā)展。此外,隨著分布式系統(tǒng)的高速發(fā)展和升級(jí),API 將在通信方面發(fā)揮更關(guān)鍵與重要作用。

作為開發(fā)者,了解每種 API 樣式的優(yōu)點(diǎn)和局限性并選擇最適合給定需求的方法非常重要。

這樣的心態(tài),可以幫助我們充滿信心地駕馭當(dāng)下的 API 領(lǐng)域。

本文章轉(zhuǎn)載微信公眾號(hào)@21CTO

上一篇:

大規(guī)模分布式架構(gòu)中,怎樣設(shè)計(jì)和選擇 API 限流技術(shù)?

下一篇:

FastAPI-Cache2:一個(gè)讓接口飛起來的緩存神器
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊(cè)

多API并行試用

數(shù)據(jù)驅(qū)動(dòng)選型,提升決策效率

查看全部API→
??

熱門場景實(shí)測,選對(duì)API

#AI文本生成大模型API

對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)

#AI深度推理大模型API

對(duì)比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)