本文展示了跨多個動物群實例縫製的架構,從而從不同的數據源創建了統一的GraphQl API。我們還將探索將動物區係與其他GraphQL服務相結合。
了解模式縫線
架構縫線是一種從多個基礎GraphQl API構建單個GraphQl API的技術。
為什麼要使用模式縫線?
大規模應用通常採用微服務用於模塊化。但是,客戶端應用程序經常需要來自多個來源的數據。統一的GraphQl API提供了一個乾淨的接口,但是構建單片服務器可能會出現問題。 Fauna的每個數據庫的本機GraphQl是理想的,但是多個數據庫需要連接到多個實例,從而創建緊密的耦合。模式縫合通過將多個GraphQl服務組合到單個統一的模式中來解決此問題。本文涵蓋:
合併多個動物群實例
讓我們將多個FAUNA數據庫實例(例如, Product
, Inventory
, Review
)組合到單個GraphQL服務中。每個數據庫都有自己的GraphQl API(子圖)。我們的目標是用於客戶端應用程序的統一圖,以查詢所有來源的數據。
該統一的圖將是我們的網關服務。我們將使用node.js構建它。
項目設置:創建一個node.js項目:
mkdir my-gateway CD My-Gateway NPM Init-是的
安裝依賴項:
npm i express-express-graphql graphql @graphql-tools/schema @graphql-tools/stitch @graphql-tools/wrap cross-fetch-save -save-save-save-save
基本GraphQl Server(gateway.js):從簡單的Express GraphQl Server開始:
// Gateway.js(初始版本) // ...(Express Server設置)...
(此初始代碼將是類似於原始示例的裸孔服務器,但省略了簡潔的專注於縫合方面。)
FAUNA數據庫設置:創建三個FAUNA數據庫( Product
, Inventory
, Review
)並生成管理密鑰。為每個數據庫定義GraphQL模式(如原始示例所示)。
Gateway Service Enhancement(Gateway.js):使用@graphql-tools/stitch
實現模式縫製。本節將包括原始描述的makeRemoteExecutor
和makeGatewaySchema
功能,但具有改善的清晰度,並有可能重構以更好地可讀性。主要改進將是:
縫製第三方API:將網關擴展到使用相同的makeRemoteExecutor
和stitchSchemas
方法包括第三方GraphQl API(例如SpaceX API)。
部署到AWS lambda:使用無服務器框架將網關部署到AWS lambda功能。安裝必要的依賴項( serverless
, serverless-http
, body-parser
)。創建一個serverless.yaml
文件(如原始文件所示)。修改gateway.js
,與serverless-http
集成以進行適當的lambda功能處理。使用serverless deploy
部署。
結論
模式縫合為從多個數據源構建可擴展和可維護的GraphQL API提供了強大的解決方案。儘管本文使用Fauna和AWS Lambda,但這些原則廣泛應用於其他GraphQL服務和無服務器平台。阿波羅聯合會(Apollo Federation)等替代方法提供了類似的功能。
以上是跨多個數據源實現單個GraphQl的詳細內容。更多資訊請關注PHP中文網其他相關文章!