GraphQL Federation:如何使用,而不是扩展
GraphQL Federation: How To Consume, Not Extend
我有一个 returns Product
的服务,我可以在返回 Review
的服务中通过 GraphQL Federation 扩展它。评论服务依赖于 Product
,这种解耦非常棒!
我还有一个订单服务,可以存储(除其他外)OrderItem
s 具有 productId
:
type OrderItem @key(fields : ["id"]) {
id: String
amount: Int
position: Int
productId: String
}
现在我希望客户端也能够直接 select Product
中被 productId
引用的任何字段:
orderItem(id: "123") {
position
amount
product {
name
price
}
}
如果我编写一个普通的解析器来添加 product
字段,我必须复制完整的 Product
模型(并在 Product
发生变化时更新订单服务)。我不想要那个。我也想在这里使用联邦
我希望订单服务扩展(并因此依赖于)Product
,但只知道它的 id,而产品服务不能知道订单服务的任何信息。所以这是在评论服务中看到的依赖关系的反转。我不想从另一个服务 添加 到模型,我希望客户端能够 使用 它,而我的服务不知道详情。
我以为这样应该更容易,但我太盲目了,看不到我需要做什么!我找不到示例或教程或任何这样做的方法。
非常感谢您的帮助!
愚蠢的我!它实际上 是 和我想象的一样简单,我一直在寻找一个不相关的(尽管对我来说很神秘)错误消息。
我只需添加一个 returns 我的 Product
存根实例的解析器(即仅包含 id
)。其余的就像一个魅力!
我有一个 returns Product
的服务,我可以在返回 Review
的服务中通过 GraphQL Federation 扩展它。评论服务依赖于 Product
,这种解耦非常棒!
我还有一个订单服务,可以存储(除其他外)OrderItem
s 具有 productId
:
type OrderItem @key(fields : ["id"]) {
id: String
amount: Int
position: Int
productId: String
}
现在我希望客户端也能够直接 select Product
中被 productId
引用的任何字段:
orderItem(id: "123") {
position
amount
product {
name
price
}
}
如果我编写一个普通的解析器来添加 product
字段,我必须复制完整的 Product
模型(并在 Product
发生变化时更新订单服务)。我不想要那个。我也想在这里使用联邦
我希望订单服务扩展(并因此依赖于)Product
,但只知道它的 id,而产品服务不能知道订单服务的任何信息。所以这是在评论服务中看到的依赖关系的反转。我不想从另一个服务 添加 到模型,我希望客户端能够 使用 它,而我的服务不知道详情。
我以为这样应该更容易,但我太盲目了,看不到我需要做什么!我找不到示例或教程或任何这样做的方法。
非常感谢您的帮助!
愚蠢的我!它实际上 是 和我想象的一样简单,我一直在寻找一个不相关的(尽管对我来说很神秘)错误消息。
我只需添加一个 returns 我的 Product
存根实例的解析器(即仅包含 id
)。其余的就像一个魅力!