[英]Graphql Apollo Federation
當我需要在彼此之間使用不同的服務時,我相信我了解如何使用 @key 擴展類型。 舉個例子,以防我這個新手,我的理解不正確。 例如,如果我有一項針對Accounts
的服務和一項針對Users
的服務,而在后者中我有類似的東西,
type Users @key(fields: "accountIds") {
id: ID!
accountIds: [ID]
}
我會通過在我的Accounts
服務中添加一個文件來擴展它,以擴展Users
例如:
extend type Users @key(fields: "accountIds") {
accountIds: [ID] @external
accounts: [Accounts!]
}
我還需要添加一個解析器來設置應該是什么accounts
。 首先,上面的說法正確嗎? 我明白我在做什么還是我錯過了什么?
下一個。 我將如何處理在未聯合的現有代碼庫中看起來像這樣的類型: union AccountResult = Accounts | SelectedAccounts
union AccountResult = Accounts | SelectedAccounts
如果我需要將該AccountResult
用作其他一些服務中的類型,我將如何使其可用? 鑒於我上面的內容,我不知道我怎么能做到這一點。 再次,我是新手,所以我感謝你的耐心。
在用戶聯合服務中
type Users @key(fields: "id") {
id: ID!
accountIds: [String]
}
在Accounts Federated Service 中擴展用戶類型
extend type Users @key(fields: "id") {
id: ID! @external
accounts: [Accounts]
}
帳戶聯合服務中的帳戶類型可能如下所示;
type Accounts @key(fields: "id") {
id: ID!
accountHolderId: String!
accountType: String!
amount: Float!
}
之后,在Resolver of Accounts Federated Service 中,編寫類似這樣的內容來解析擴展用戶類型中的帳戶字段
const resolver = {
Users: {
async accounts(users) {
// get account ids array of users using users.accountId
// you can make a DB call and get Accounts Service Data and filter ids
// of those retrieved data with users.accountId data
// finally return filtered data
}
}
}
“異步帳戶”方法在解析器中有這樣的簽名;
異步帳戶(父數據,傳遞的值,上下文,信息){}
我使用用戶參數作為父數據其他參數是可選的
除此之外,您可以使用解析引用( __resolveReference(ref) ) 方法將數據從一個服務附加到另一個服務。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.