如何将存在结果依赖的两个GraphQL查询合并为单个查询?
可以合并为单个GraphQL查询执行,常用两种实现方案:
方案1:使用字段别名批量查询(无需服务端改造)
GraphQL原生支持字段别名机制,你可以为每一个需要查询的itemDetail指定唯一标识的别名,把所有ID对应的详情查询和第一个items查询整合到同一条请求中,示例如下:
{ items(name: "jim") { id } # 每一个待查询的ID对应一个别名段 itemDetail_123: itemDetail(id: 123) { name description } itemDetail_456: itemDetail(id: 456) { name description } }
这种方式不需要改动服务端现有逻辑,你只需要在构造查询请求时,先确认好需要查询的ID列表,动态生成对应别名的查询段即可,返回结果中会对应返回每个别名绑定的详情数据。如果ID数量不多,这是成本最低的方案。
方案2:新增服务端关联/批量字段(更简洁,推荐)
如果可以协调服务端做小调整,更推荐两种优化方式:
- 新增支持传入ID数组的
itemDetails批量查询字段,你可以把第一个查询拿到的所有ID作为数组参数传入,一次性取回所有详情,查询逻辑更简洁 - 直接在
Item类型中扩展detail关联字段,在Resolver层完成ID到ItemDetail的关联拼接,不需要修改底层数据结构,就可以直接用嵌套查询一步拿到所有数据:
{ items(name: "jim") { id detail { name description } } }
这种方式查询语句更简洁,也不会因为ID数量过多导致查询语句冗余,是GraphQL的标准使用姿势。
内容的提问来源于stack exchange,提问作者Peter Stenger
相关产品推荐
相关产品推荐

