作者 | Tanmay Deshpande
譯者 | 明知山
策劃 | 丁曉昀
最近,LinkedIn 透露了他們?nèi)绾螢?LinkedIn Marketing API 構(gòu)建 API 版本化框架,允許外部合作伙伴按照自己的節(jié)奏遷移到新版本的 API。
在這個(gè)新框架中,每個(gè) API 產(chǎn)品都通過一個(gè)為外部合作伙伴提供 API 的中間層公開其版本化的模型和 API。中間層 API 和模型通過特定的版本向外部公開,用戶可以按照自己的節(jié)奏遷移到新版本。
遺留的架構(gòu)由各種業(yè)務(wù)線構(gòu)建的后端 API 組成,并通過 Rest.liAPI 網(wǎng)關(guān)對(duì)外公開。由于這些 API 沒有版本控制,所有為內(nèi)部 API 實(shí)現(xiàn)的東西都會(huì)直接暴露給外部用戶。
這篇文章解釋道:“未版本化的 API 阻礙了用戶訪問最新的特性,并給內(nèi)部開發(fā)新特性帶來了挑戰(zhàn)。此外,開發(fā)者的反饋表明,我們?cè)诙虝r(shí)間內(nèi)發(fā)布了太多 API 變更,打亂了他們的計(jì)劃。”
LinkedIn 構(gòu)建了新的框架,基于特定版本公開模型和 API 變更,從而有效地將外部應(yīng)用程序的變更隔離開,并允許合作伙伴按照自己的節(jié)奏遷移到新版本。
每當(dāng)外部應(yīng)用程序請(qǐng)求特定的 API 版本時(shí),API 網(wǎng)關(guān)將對(duì)請(qǐng)求進(jìn)行轉(zhuǎn)換,并將其轉(zhuǎn)發(fā)到適當(dāng)?shù)闹虚g層。
與其他 API 網(wǎng)關(guān)一樣,這個(gè)架構(gòu)中的 API 網(wǎng)關(guān)帶有身份驗(yàn)證、請(qǐng)求映射、節(jié)流控制、授權(quán)、反濫用控制和請(qǐng)求調(diào)度功能。
最終,中間層將后端實(shí)現(xiàn)的特性公開給外部應(yīng)用程序。
每個(gè) API 產(chǎn)品只有一個(gè)中間層。
同一邏輯資源的不同版本可以在中間層中共存,并在代碼中維護(hù)這個(gè)引用。網(wǎng)關(guān)使用請(qǐng)求映射調(diào)用所需的資源版本。
中間層的服務(wù)負(fù)責(zé)從業(yè)務(wù)線調(diào)用后端與版本無關(guān)的服務(wù)。如果中間層服務(wù)在代碼中維護(hù)特定于版本的邏輯,則可能會(huì)導(dǎo)致代碼維護(hù)問題。為了避免這種情況,團(tuán)隊(duì)構(gòu)建了“版本執(zhí)行框架”庫,用于完成這兩件重要的事情——通過用戶定義的轉(zhuǎn)換將請(qǐng)求轉(zhuǎn)換為最新的可能版本;請(qǐng)求被轉(zhuǎn)換為最新的可能版本后,將再次通過用戶定義的內(nèi)部模型轉(zhuǎn)換器將其轉(zhuǎn)換為最新可用的內(nèi)部模型。
這一實(shí)現(xiàn)凸顯了 LinkedIn“不干擾客戶”的設(shè)計(jì)原則。
隨著版本化的 LinkedIn Marketing API 于 2022 年 6 月發(fā)布,開發(fā)者和合作伙伴可以使用這些穩(wěn)定的 API。
https://www.infoq.com/news/2022/08/linkedin-api-versioning/