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