如何在StepZen中合并两个REST接口返回列表并执行转换?
解决方案
要实现两个列表的合并与转换,你可以直接在getMerged查询上结合@materializer和@transform,无需保留原来的Merged类型。具体步骤如下:
- 定义合并后的结果类型
创建一个包含所有需要字段的类型,用于承载合并后的数据:
type CombinedItem { id: ID! value: Int otherValue: Int }
- 修改
getMerged查询
将getMerged的返回类型改为[CombinedItem],通过@materializer同时获取两个列表的数据,再用@transform执行你的jq转换逻辑:
type Query { getFirstList: [FirstList] @rest(endpoint: ".../getFirst_list") getSecondList: [SecondList] @rest(endpoint: ".../getSecond_list") getMerged: [CombinedItem] @connector(type: "echo") @materializer( query: """ query { firstList: getFirstList secondList: getSecondList } """ ) @transform( jq: ".firstList as $list1 | .secondList as $list2 | $list1 + $list2 | group_by(.id) | map(add)" ) }
效果说明
执行getMerged查询后,会返回合并并转换后的数组:
{ "data": { "getMerged": [ { "id": "1", "value": 1, "otherValue": 1 }, { "id": "2", "value": 2, "otherValue": null }, { "id": "3", "value": 3, "otherValue": 3 }, { "id": "4", "value": null, "otherValue": 4 } ] } }
关键说明
@materializer用于在getMerged中调用已定义的getFirstList和getSecondList查询,获取两个原始列表数据。@transform的jq表达式会直接处理@materializer返回的结果,完成合并、分组和字段合并操作,这一步在StepZen服务端执行,无需前端处理。- 移除原来的
Merged类型,直接返回合并后的结果即可。
内容的提问来源于stack exchange,提问作者J.F.
相关产品推荐
相关产品推荐

