繁体   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