如何通过片段实现GraphQL联合类型的查询?
如何用片段实现GraphQL联合类型查询
你的问题出在两个核心点:片段语法错误,以及联合类型查询时未正确结合类型条件与命名片段。以下是正确的实现方式:
第一步:修正片段定义
你之前的片段里写了content: string,这是类型定义的语法,查询字段时只需直接写字段名即可。正确的命名片段应该是:
# 针对PostActivity类型的可复用片段 fragment PostActivityFragment on PostActivity { content } # 针对ConcludeActivity类型的可复用片段 fragment ConcludeActivityFragment on ConcludeActivity { field }
第二步:在查询中结合类型条件与命名片段
联合类型的查询必须通过... on 具体类型的类型条件来区分不同成员类型,你需要把命名片段放在对应的类型分支里,这样GraphQL才能正确识别每个类型对应的字段:
query Activities { # 假设这里是返回Activity联合类型的顶层字段(比如单个activity或activities列表) activity { id # BaseActivity的公共字段 ... on PostActivity { ...PostActivityFragment # 引用PostActivity的复用片段 } ... on ConcludeActivity { ...ConcludeActivityFragment # 引用ConcludeActivity的复用片段 } } }
为什么之前的写法无效
你直接在顶层查询中展开两个片段,相当于要求GraphQL“不管当前是哪种Activity类型,都请求content和field字段”,这会导致服务器返回所有可能的字段(存在的字段有值,不存在的为null),不符合联合类型的查询逻辑。而通过类型条件包裹命名片段,GraphQL会根据对象的实际类型,只请求对应片段里的字段,既保留了片段的复用性,又符合联合类型的查询规范。
内容的提问来源于stack exchange,提问作者qwerty1234567
相关产品推荐
相关产品推荐

