簡體   English   中英

Graphql 阿波羅聯盟

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM