Supergraph:API編排和組合的解決方案
在本系列的上一篇文章中,我們討論了在企業(yè)數(shù)據(jù)環(huán)境中構(gòu)建和使用 API 的復(fù)雜性。這些環(huán)境涉及由不同團(tuán)隊(duì)管理的多個(gè)數(shù)據(jù)域和眾多應(yīng)用程序,由于資源受限和目標(biāo)沖突,導(dǎo)致挑戰(zhàn)。
譯自Supergraph: A Solution for API Orchestration and Composition,作者 Sandip Devarkonda。
Supergraph 架構(gòu)框架 (SAF),源于我們?cè)诼?lián)邦數(shù)據(jù)訪問和 GraphQL 聯(lián)邦方面的經(jīng)驗(yàn),通過提出構(gòu)建域 API(子圖)和數(shù)據(jù)訪問 API 平臺(tái)( SUPERGRAPH )的策略來解決這些挑戰(zhàn)。
該框架提供了一個(gè)團(tuán)隊(duì)協(xié)作的操作模型,充當(dāng)具有 API 生產(chǎn)者和消費(fèi)者的 API 市場(chǎng)。它簡化了 API 生產(chǎn)者的加入,為消費(fèi)者提供高質(zhì)量的 SUPERGRAPH API,并強(qiáng)調(diào)具有過濾、排序和分頁等功能的高質(zhì)量域 API。
SAF 為聯(lián)邦域所有權(quán)的操作模型和系統(tǒng)設(shè)計(jì)奠定了基礎(chǔ)。在企業(yè)數(shù)據(jù)和 API 環(huán)境中,這有助于解決聯(lián)邦數(shù)據(jù)訪問的挑戰(zhàn),并使 API 編排和 API 組合等用例更容易解決。
API 編排
API 編排涉及管理多個(gè) API 調(diào)用,并對(duì)請(qǐng)求和結(jié)果進(jìn)行排序以執(zhí)行復(fù)雜的任務(wù)或工作流。在我們的參考上下文中,API 編排的示例可能涉及以下順序:
- 餐廳 API: 檢查菜單和可用性。
- 支付 API: 處理付款。
- 配送 API: 安排配送。
編排層按順序處理這些步驟,確保每個(gè)步驟在移至下一步之前成功完成,并將它們的響應(yīng)組合成一個(gè)單一的、連貫的用戶結(jié)果。
圖片
API 編排的挑戰(zhàn)
編排主要由 API 消費(fèi)者根據(jù)最終用戶需求驅(qū)動(dòng)。它具有挑戰(zhàn)性,因?yàn)樗ǔ?缭蕉鄠€(gè)域。使用傳統(tǒng)方法進(jìn)行編排需要與聚合相同的“粘合”代碼/端點(diǎn)——只是在這種情況下,這種粘合更復(fù)雜,正如我們從示例中看到的那樣。編排通常還涉及多個(gè)變異,這進(jìn)一步加劇了挑戰(zhàn)。
我們?cè)俅斡龅搅怂袡?quán)的挑戰(zhàn):消費(fèi)者團(tuán)隊(duì)是否應(yīng)該擁有編排代碼?該團(tuán)隊(duì)是否具備構(gòu)建高性能編排端點(diǎn)所需的技能?這些都是需要解決的操作挑戰(zhàn),以便在域 API/數(shù)據(jù)之上構(gòu)建強(qiáng)大的編排層。
解決 API 編排挑戰(zhàn)
一個(gè)好的 API 平臺(tái)必須提供語義來定義可能與業(yè)務(wù)邏輯函數(shù)交織在一起的復(fù)雜工作流。類似于 SUPERGRAPH 架構(gòu)允許域 CRUD API 和業(yè)務(wù)邏輯之間建立關(guān)系的方式,API 調(diào)用的響應(yīng)可以鏈接到可以獨(dú)立運(yùn)行的函數(shù)(甚至可以從 SUPERGRAPH 調(diào)用其他 CRUD API)或反之亦然。
這種能力的基礎(chǔ)是,來自任何來源(數(shù)據(jù)庫、API 等)的每條數(shù)據(jù)和業(yè)務(wù)邏輯代碼中的類型都在 SUPERGRAPH 的語義層上標(biāo)準(zhǔn)化。這使 SUPERGRAPH 能夠?yàn)殚_發(fā)人員(包括 API 消費(fèi)者)提供語義,以便他們僅使用聲明性配置來表達(dá)工作流。
與 Camunda、Orkus、Temporal 等第三方編排軟件的集成使開發(fā)人員的體驗(yàn)更加無縫。閱讀有關(guān)API 編排的更多信息。
問題 | 解決方案 |
新的工作流需要新的編排端點(diǎn)。 | SUPERGRAPH 要求 API 消費(fèi)者能夠使用聲明性配置自助服務(wù)對(duì)新工作流的需求。 |
編寫工作流需要后端系統(tǒng)工程知識(shí)。 | SUPERGRAPH 配置是聲明性的,這使構(gòu)建可擴(kuò)展工作流的能力民主化。 |
API 組合
API 組合可以被認(rèn)為是 API 集成和編排的特殊情況(或演變),它指的是將多個(gè) API 響應(yīng)組合成單個(gè)統(tǒng)一響應(yīng)的技術(shù),該響應(yīng)包含來自不同調(diào)用的分層信息。換句話說,組合以一種連貫的方式從不同的來源獲取相關(guān)數(shù)據(jù)——因此,對(duì)于讀取操作來說,它是聚合和編排。API 組合的一個(gè)例子是以下關(guān)于我們食品配送應(yīng)用程序用戶的示例數(shù)據(jù):
- 用戶的過去訂單。
- 對(duì)于每個(gè)訂單,獲取有關(guān)放置訂單的餐廳的一些信息。
- 對(duì)于每個(gè)訂單,獲取支付信息。
獲取這些信息涉及按順序向三個(gè)不同的域發(fā)出請(qǐng)求,在每一步使用上一步的響應(yīng),最后將整個(gè)結(jié)果集組合成一個(gè)單一的層次化響應(yīng),該響應(yīng)表示三個(gè)實(shí)體(訂單、餐廳和支付)之間的關(guān)系。
API 組合面臨的挑戰(zhàn)以及如何解決
Supergraph(QL) 架構(gòu)主張了解底層來源或域,并在異構(gòu)來源集中進(jìn)行標(biāo)準(zhǔn)化。這使得 supergraph 可以提供 API 組合自助服務(wù)模型,而無需任何自定義開發(fā),方法是提供以下兩種功能:
- 連接: 從 A 獲取數(shù)據(jù),并從 B 獲取相關(guān)數(shù)據(jù)。
- 嵌套過濾器: 從 A 獲取數(shù)據(jù),并根據(jù)其相關(guān)數(shù)據(jù) B 的屬性值進(jìn)行過濾。
問題 | 解決方案 |
每個(gè)數(shù)據(jù)組合排列都需要一個(gè)組合端點(diǎn)。 | supergraph 通過跨來源數(shù)據(jù)的聲明式關(guān)系定義來自動(dòng)執(zhí)行組合。如果可以從程序上推斷出來自同一來源的關(guān)系,則 supergraph 可以自動(dòng)執(zhí)行此操作。 |
創(chuàng)作工作流需要了解后端系統(tǒng)工程。 | supergraph 配置是聲明式的,這使得工程師能夠輕松地構(gòu)建可擴(kuò)展的工作流。 |
閱讀更多關(guān)于API 組合的內(nèi)容。
結(jié)論:實(shí)踐者的 API 平臺(tái)設(shè)計(jì)清單
基于之前關(guān)于 Supergraph 架構(gòu)框架的帖子,我們可以為任何尋求解決 API 集成、聚合、組合和編排挑戰(zhàn)的 API 平臺(tái)(稱為 supergraph)設(shè)計(jì)編制以下綜合清單。
指南 | 描述 |
1. 集成 | 使 API 消費(fèi)者能夠輕松地將 API 集成到其服務(wù)中 |
1.1 多種 API 格式 | supergraph 平臺(tái)是否可以自動(dòng)提供除 GraphQL 之外的輸出格式,例如 REST/OpenAPI?這是為了滿足多個(gè)消費(fèi)者的集成需求。 |
1.2 文檔 | supergraph 平臺(tái)是否可以幫助域或平臺(tái)所有者維護(hù) API 文檔?如果底層域(數(shù)據(jù)庫、代碼或 API)已經(jīng)過文檔化,那么這些文檔是否會(huì)自動(dòng)被 supergraph 平臺(tái)獲取? |
1.3 標(biāo)準(zhǔn)化 | supergraph 平臺(tái)是否提供或強(qiáng)制執(zhí)行標(biāo)準(zhǔn)化的域 API 設(shè)計(jì)(分頁、過濾、排序等)? |
2. 聚合 | 使 API 消費(fèi)者能夠輕松地將多個(gè) API 調(diào)用聚合/批處理到一個(gè)調(diào)用中 |
2.1 關(guān)系 | supergraph 是否提供了一種在任何兩個(gè)實(shí)體或端點(diǎn)之間創(chuàng)建關(guān)系的方法,而無需域所有者進(jìn)行更改? |
2.2 可組合性 | 鑒于 supergraph 中兩個(gè)實(shí)體之間的關(guān)系,supergraph 提供了多少個(gè)“連接”功能? |
3. 編排 | 使 supergraph 利益相關(guān)者能夠輕松地創(chuàng)作自定義 API 編排 |
3.1 聯(lián)合變異/解耦編排業(yè)務(wù)邏輯 | supergraph 是否提供了一種在底層域內(nèi)或跨底層域創(chuàng)作編排流程的方法? |
衡量平臺(tái)設(shè)計(jì)滿足這些標(biāo)準(zhǔn)的有效性以及構(gòu)建這些功能所需的時(shí)間和精力投入,將為任何架構(gòu)師提供一個(gè)明確的指標(biāo),表明其平臺(tái)計(jì)劃的成功可能性。