如何在Apollo Federation中扩展嵌入式子对象且不覆盖原有字段?
解决方案
要在GraphQL联邦中扩展嵌入式对象且不覆盖原有字段、保留原服务的解析权,你可以按照以下方式编写Service B的Schema:
type A @key(fields: "id") { id: ID! @external # 重新声明embeddedMetaData字段,关联扩展的MetaData新字段 embeddedMetaData: MetaData } # 仅定义需要新增的字段,原有字段由Service A负责维护与解析 type MetaData { fieldB: String }
关键说明:
- 联邦网关会自动合并两个服务中的
MetaData类型,最终的MetaData会包含fieldA(由Service A解析)和fieldB(由Service B解析)。 - 在Service B的解析器中,只需实现
A.embeddedMetaData.fieldB的解析逻辑,基于A.id获取对应值即可,无需处理fieldA相关逻辑。 - 这种方式不会覆盖Service A的任何字段,原服务对
fieldA和embeddedMetaData的解析权完全保留,网关在处理查询时会分别向两个服务请求对应字段的数据。
内容的提问来源于stack exchange,提问作者Huszar Gellert
相关产品推荐
相关产品推荐

