軟件架構(gòu)的變遷與API的發(fā)展
前言
連接是一件令人驚喜的事情,現(xiàn)在我們已習(xí)慣動(dòng)動(dòng)手指就可以實(shí)時(shí)鏈接世界,從電腦到移動(dòng)設(shè)備上我們可以在任何地方任何時(shí)間購物,郵件,社交,篩選東西,實(shí)現(xiàn)前所未有的方式與世界互連,這一切的背后正是有 API 這位無名英雄存在。通過 API,一方以特定方式發(fā)送遠(yuǎn)程請(qǐng)求,而無需了解對(duì)方內(nèi)部系統(tǒng)的邏輯,即可訪問對(duì)方開放的資源,實(shí)現(xiàn)企業(yè)內(nèi)外部產(chǎn)品和服務(wù)的互動(dòng)。API 已成為企業(yè)內(nèi)外系統(tǒng)集成的重要手段。如今,互聯(lián)網(wǎng)環(huán)境瞬息萬變,跨界融合創(chuàng)新不斷發(fā)生,使得 API 的使用亦更加廣泛,API Bank 的誕生,人工智能 ChatGPT API 的橫空出世,就已經(jīng)注定了 API 與傳統(tǒng)行業(yè)的邂逅已無處不在。而這一切的“幕后之手” API 在不同架構(gòu)時(shí)代發(fā)展中又經(jīng)歷了哪些,未來 API 又會(huì)具有怎樣的趨勢呢?
發(fā)展歷程
“道由白云盡,春與青溪長?!?/span>
API 單體架構(gòu)時(shí)代
所謂單體,簡單理解就是一個(gè)程序里包含了一個(gè)系統(tǒng)/產(chǎn)品的所有業(yè)務(wù)功能,比如一個(gè) ERP 系統(tǒng),就包含了商品模塊、訂單模塊、采購模塊、銷售模塊、庫存模塊、報(bào)表模塊等等,這個(gè)程序在部署時(shí)就是一個(gè)進(jìn)程,比如把 WAR 包部署到 Tomcat 中。API 負(fù)責(zé)進(jìn)行內(nèi)部服務(wù)調(diào)用。在當(dāng)時(shí)單體結(jié)構(gòu)的優(yōu)點(diǎn)也是顯而易見的。
- 結(jié)構(gòu)簡單,容易理解:對(duì)于我們開發(fā)人員而言,這是非常重要的一點(diǎn)。經(jīng)典的分層架構(gòu)已經(jīng)相對(duì)比較成熟,更容易被大家所理解和接受,學(xué)習(xí)成本也相對(duì)比較低,對(duì)團(tuán)隊(duì)本身的要求也不是特別高。這不僅使得系統(tǒng)的設(shè)計(jì)和開發(fā)都相對(duì)比較容易,而且出錯(cuò)的幾率會(huì)相對(duì)低一些。用現(xiàn)在時(shí)髦的詞語說,就是“坑相對(duì)較少”,開發(fā)實(shí)現(xiàn)都可以“踩在踩坑人的背上前進(jìn)”,實(shí)現(xiàn)數(shù)據(jù)一致性相對(duì)比較容易,通過本地事務(wù)或者分布式事務(wù)可以方便有效地保證數(shù)據(jù)一致性。
- 部署簡單方便:比如上面提到的 ERP 系統(tǒng),可以方便快速地打包成 WAR 包,部署到 Jetty 或者 Tomcat 容器中,也可以是一個(gè)部署在 IIS 中的 .NET 解決方案。無論哪種,一次部署完成即可運(yùn)行整個(gè)應(yīng)用程序。
- 持續(xù)集成策略的設(shè)計(jì)相對(duì)容易:基本上團(tuán)隊(duì)可以根據(jù)項(xiàng)目的實(shí)際情況很容易地設(shè)計(jì)出持續(xù)集成方案,很多情況下,整套解決方案會(huì)放在同一個(gè)代碼庫中,根據(jù)持續(xù)集成策略,項(xiàng)目的持續(xù)交付也不會(huì)有太大壓力。
隨著互聯(lián)網(wǎng)時(shí)代的迅速發(fā)展,需求量的提升,單體架構(gòu)的缺點(diǎn)也逐漸凸顯,系統(tǒng)啟動(dòng)慢,一個(gè)進(jìn)程包含了所有的業(yè)務(wù)邏輯,涉及到的啟動(dòng)模塊過多,導(dǎo)致系統(tǒng)的啟動(dòng)、重啟時(shí)間周期過長。
- 系統(tǒng)錯(cuò)誤隔離性差、可用性差:任何一個(gè)模塊的錯(cuò)誤均可能造成整個(gè)系統(tǒng)的宕機(jī)。
- 可伸縮性差:系統(tǒng)的擴(kuò)容只能只對(duì)這個(gè)應(yīng)用進(jìn)行擴(kuò)容,不能做到對(duì)某個(gè)功能點(diǎn)進(jìn)行擴(kuò)容。
- 線上問題修復(fù)周期長:任何一個(gè)線上問題修復(fù)需要對(duì)整個(gè)應(yīng)用系統(tǒng)進(jìn)行全面升級(jí)。這些缺點(diǎn)也導(dǎo)致了單體架構(gòu)隨之慢慢被微服務(wù)架構(gòu)所替代,而 API 作為微服務(wù)的交流方式,也注定了 API 的命運(yùn)不會(huì)平凡。
API SOA 架構(gòu)時(shí)代
當(dāng)軟件架構(gòu)發(fā)展至 SOA 時(shí)代,其中的許多概念、思想都已經(jīng)能在今天微服務(wù)中找到對(duì)應(yīng)的身影了。服務(wù)之間的松散耦合、注冊(cè)、發(fā)現(xiàn)、治理,隔離、編排,等等。這些今天微服務(wù)中耳熟能詳?shù)拿~概念,大多數(shù)也是在分布式服務(wù)剛被提出時(shí)就已經(jīng)預(yù)見到的困難。SOA 針對(duì)這些問題,乃至于針對(duì)“軟件開發(fā)”這件事情本身,進(jìn)行了更加系統(tǒng)性、更加具體的探索。
采用 SOA 架構(gòu)可提高業(yè)務(wù)敏捷性,無需重寫和重新集成每個(gè)新開發(fā)項(xiàng)目,而是通過可復(fù)用服務(wù)接口 API 組裝應(yīng)用程序,因此極大地提高了效率,讓我們開發(fā)人員能夠更快地構(gòu)建應(yīng)用程序以應(yīng)對(duì)新的商機(jī)。
在當(dāng)時(shí) API 通過輕型協(xié)議 SOAP 這種簡單對(duì)象訪問協(xié)議,用于分散的、分布式計(jì)算環(huán)境中交換信息。以助于獨(dú)立于平臺(tái)的方式訪問對(duì)象、服務(wù)和服務(wù)器。
SOA 在 21 世紀(jì)最初的十年里曾經(jīng)盛行一時(shí),眾多行業(yè)巨頭廠商為其吶喊沖鋒,吸引了不少軟件開發(fā)商、尤其是企業(yè)級(jí)軟件的開發(fā)商的跟隨,最終卻還是偃旗息鼓,沉寂了下去。其逐漸邊緣化的本質(zhì)原因,是因?yàn)檫^于嚴(yán)格的規(guī)范定義帶來過度的復(fù)雜性。SOA 誕生的那一天起,就已經(jīng)注定了它只能是少數(shù)系統(tǒng)精致奢侈品,它可以實(shí)現(xiàn)多個(gè)異構(gòu)大型系統(tǒng)之間的復(fù)雜集成交互,卻很難作為一種具有廣泛普適性的軟件架構(gòu)風(fēng)格來推廣。
API REST 架構(gòu)時(shí)代
REST 架構(gòu)時(shí)代的到來使得 REST API 幾乎可以使用任何編程語言進(jìn)行開發(fā),并支持多種數(shù)據(jù)格式。REST 如今是一種無需解釋的 API 架構(gòu)風(fēng)格,它由一系列的架構(gòu)約束所定義,被廣泛 API 使用者采用?;?RESTful 架構(gòu)的應(yīng)用程序所具備的特征,我們?cè)陂_發(fā)和部署它們時(shí)就可以感受到這一系列明顯的優(yōu)勢,這也使得 REST 這套設(shè)計(jì)規(guī)范成為了當(dāng)前開發(fā)互聯(lián)網(wǎng)應(yīng)用程序的主要解決方案之一。在這里,我們可以簡單地將這些優(yōu)勢歸納如下:
- 接口統(tǒng)一:這是 RESTful 架構(gòu)的設(shè)計(jì)初衷,它致力于讓后端業(yè)務(wù)邏輯以統(tǒng)一接口的方式向前端提供服務(wù),這樣就簡化了系統(tǒng)架構(gòu),降低了應(yīng)用程序前后端之間的耦合性,以便于程序員們?cè)陂_發(fā)整個(gè)應(yīng)用程序可進(jìn)行模塊化分工
- 分層系統(tǒng):RESTful 架構(gòu)允許在后端構(gòu)建基于多臺(tái)服務(wù)器的分層系統(tǒng)服務(wù)。這意味著,應(yīng)用程序的前端通常不需要知道自己連接的是最終的服務(wù)器,還是某臺(tái)資源請(qǐng)求路徑上的中間服務(wù)器。這更有助于我們?cè)诓渴鸷途S護(hù)應(yīng)用程序時(shí)設(shè)置更為穩(wěn)妥的服務(wù)器負(fù)載策略和其他安全性策略。
- 易于重構(gòu):正是由于 RESTful 架構(gòu)實(shí)現(xiàn)了應(yīng)用程序的前后端在業(yè)務(wù)邏輯上的分離,降低它們之間的耦合度,這意味著我們對(duì)前端業(yè)務(wù)邏輯所進(jìn)行的任何重構(gòu)都基本上不會(huì)對(duì)后端的實(shí)現(xiàn)產(chǎn)生影響,反之亦然。例如我們既可以根據(jù)智能手機(jī),PC 等不同客戶端設(shè)備重構(gòu)出不同的前端用戶界面,也可以在用 JavaScript 基于 Node.js 運(yùn)行環(huán)境編寫的程序無法滿足性能需求時(shí),使用 Python、Go 等更適用于大規(guī)??茖W(xué)運(yùn)算的編程語言重構(gòu)后端服務(wù)部分的業(yè)務(wù)邏輯。
雖然 REST 設(shè)計(jì)有益于支撐 SOA 的目標(biāo),但務(wù)實(shí)的 REST 的戰(zhàn)略關(guān)注點(diǎn)與許多 SOA 的舉措不同。務(wù)實(shí)的 REST API 設(shè)計(jì)團(tuán)隊(duì)專注于自下而上的應(yīng)用場景、友好的協(xié)議或格式,比如 HTTP、JSON、DNS,以及寬容的接口定義和簡單的交互模型,比如在保證送達(dá)之上的重試。
大家在系統(tǒng)中,專注于管理對(duì)象并面向許多使用者的 API 是最常見的 API 類型。REST 幫助此類 API 具有強(qiáng)大的可發(fā)現(xiàn)性,良好的文檔編制,因此 REST 非常適合此對(duì)象模型。簡單的資源驅(qū)動(dòng)型應(yīng)用程序。在用于連接不需要查詢靈活性的資源驅(qū)動(dòng)型應(yīng)用時(shí),REST 是一種非常有效的方法。
未來趨勢
“時(shí)有落花至,遠(yuǎn)隨流水香?!?/span>
人工智能 API 將惠及所有人
發(fā)展到時(shí)代的今天人工智能 AI,已經(jīng)成為家喻戶曉的一個(gè)名詞,而最近爆火的 ChatGPT 更是席卷了整個(gè)互聯(lián)網(wǎng),也標(biāo)志著人工智能成為當(dāng)前科技革命的核心技術(shù),我們或許將真正迎來一個(gè)人工智能助理時(shí)代。通過基于大型預(yù)訓(xùn)練語言模型,我們可以對(duì)其進(jìn)行微調(diào),以完成各種任務(wù),如回答問題、提供信息或參與對(duì)話。與許多使用預(yù)定義的響應(yīng)或規(guī)則生成文本的聊天機(jī)器人不同,ChatGPT 經(jīng)過了訓(xùn)練,可以根據(jù)接收到的輸入生成響應(yīng),從而生成更自然、更多樣化的響應(yīng)。
ChatGPT 模型的出現(xiàn)對(duì)于文字/語音模態(tài)的 AIGC 應(yīng)用具有重要意義,可能會(huì)對(duì) AI 產(chǎn)業(yè)上下游產(chǎn)生重大影響。AI 殺手級(jí)的出現(xiàn)可能會(huì)通過 API 鏈接實(shí)現(xiàn)不同領(lǐng)域應(yīng)用上的改革,可代替大量低端人工,將給世界帶來新的產(chǎn)業(yè)革命。也標(biāo)志著未來世界的每一個(gè)關(guān)鍵的科技進(jìn)步所需要的資源也將越來越多,API 的優(yōu)勢將會(huì)越來越顯著。
時(shí)代的今天 API 開放已經(jīng)成為不可逆的趨勢,OpenAI 于3月2日發(fā)布公告,正式向第三方開發(fā)者開放 ChatGPT API,以及 Whisper API,通過 API 將 ChatGPT 集成到第三方的應(yīng)用程序和服務(wù)中,這也趨勢著人工智能接口 API 的普及,未來會(huì)有更多的企業(yè)通過 API 進(jìn)行 AI 對(duì)接,在各種領(lǐng)域我們都有可能潛移默化的享受著 AI 的惠及。
API 驅(qū)動(dòng)數(shù)字化轉(zhuǎn)型
“API Bank”概念的誕生,標(biāo)志著通過 API 架構(gòu)驅(qū)動(dòng),場景金融將融入互聯(lián)網(wǎng)生態(tài),圍繞客戶需求和體驗(yàn),形成即想即用的跨界服務(wù),重構(gòu)全新的銀行業(yè)務(wù)模式和經(jīng)營理念,推動(dòng)銀行產(chǎn)品、服務(wù)全面升級(jí)。
舉個(gè)例子方便大家理解 API Bank,假如你要去境外旅行,通過 API Bank 銀行在幫助你完成境外旅行固定流程的同時(shí),甚至還能夠會(huì)根據(jù)你偏好主動(dòng)提供分期、信用調(diào)額、保險(xiǎn)套餐等產(chǎn)品,還可感知你位置,實(shí)時(shí)推薦周邊優(yōu)惠商戶,航班延誤信息等實(shí)用信息。你的體驗(yàn)得了前所未有的提升,基本上可說是“即想即用”。然而,更大的變革還不是表現(xiàn)在用戶端,而是銀行與企業(yè)的關(guān)系,在這里,API Bank 無界開放銀行甚至不是一個(gè)單純的技術(shù)平臺(tái),而是一個(gè)“連接器”,使銀行與各行業(yè)連接起來,構(gòu)成一個(gè)開放共享、共建共贏的生態(tài)圈。
“API Bank”只是 API 驅(qū)動(dòng)數(shù)字化轉(zhuǎn)型的開始,展望未來,我認(rèn)為企業(yè)需要籌劃未來十年之內(nèi)如何超越數(shù)字化轉(zhuǎn)型、全面實(shí)現(xiàn)數(shù)字卓越。圍繞安全性、全局范圍、訪問管理以及人工智能等高級(jí)云功能支持不斷增長的全球數(shù)字生態(tài)系統(tǒng)。設(shè)計(jì)合理且易于管理的 API ,建立起強(qiáng)大且穩(wěn)健的運(yùn)營體系。同時(shí)要注意在技術(shù)方面的長期積累與投入,未來基于 API Bank 的行業(yè)競爭,說到底還是技術(shù)實(shí)力的競爭。
寫在最后
總體來講 API 經(jīng)歷了由單體架構(gòu)時(shí)代到微服務(wù)架構(gòu)時(shí)代的轉(zhuǎn)變,如今 REST 面向業(yè)務(wù)應(yīng)用也成為了 API 架構(gòu)的一種主要風(fēng)格,未來“幕后之手” API 在人工智能和數(shù)字化經(jīng)濟(jì)方面可能同樣會(huì)有著不可小覷的貢獻(xiàn)。文章到這里就落幕了,以上也僅僅是個(gè)人的一些觀點(diǎn),希望能為大家?guī)砀钊氲睦斫?,謝謝觀看。