
如何快速實(shí)現(xiàn)REST API集成以優(yōu)化業(yè)務(wù)流程
導(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 架構(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ò)展。
當(dāng)然,REST架構(gòu)也存在一些缺點(diǎn):
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 也有它的缺點(diǎn),包括如下的幾點(diǎ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 有如下的關(guān)鍵優(yōu)勢:
如同其它 API 類型一樣,異步 API 也存在以下幾個(gè)缺點(diǎn):
與 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 API | GraphQL 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) |
在本文中,我們共同探討了不同 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
對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力
一鍵對(duì)比試用API 限時(shí)免費(fèi)