AWS AppSync(GraphQL)-使用HTTP解析器时的Where/filter子句
在AWS AppSync中是否可以使用附加的where/filter子句查询HTTP解析器 例如,http解析器返回一个产品列表(所有行)。某些使用原因需要对结果进行筛选AWS AppSync(GraphQL)-使用HTTP解析器时的Where/filter子句,graphql,aws-appsync,Graphql,Aws Appsync,在AWS AppSync中是否可以使用附加的where/filter子句查询HTTP解析器 例如,http解析器返回一个产品列表(所有行)。某些使用原因需要对结果进行筛选 榜样;如果价格
榜样;如果价格<10美元。是,则可以从HTTP数据源筛选数据。我可以想到的一种方法是在响应模板中使用if/else条件来过滤您需要的数据 假设您将价格作为查询定义中的输入,并且来自请求模板的结果体如下所示
{
"data" :
[
{"item" : "ItemA", "price" : 20},
{"item" : "ItemB", "price" : 10},
{"item" : "ItemC", "price" : 9},
{"item" : "ItemD", "price" : 8}
]
}
然后在您的响应模板中,您可以执行以下操作:
#set($resultList = [])
#set($resMap = {})
## Raise a GraphQL field error in case of a datasource invocation error
#if($ctx.error)
$util.error($ctx.error.message, $ctx.error.type)
#end
## If the response is not 200 then return an error. Else return the filtered data **
#if($ctx.result.statusCode == 200)
#foreach($item in $ctx.result.body.data)
#if($item.price < $ctx.args.price)
$util.qr($resultList.add($item))
#end
#end
$util.qr($resMap.put("result", $resultList))
#return($resMap)
#else
$utils.appendError($ctx.result.body, "$ctx.result.statusCode")
#end
希望这有帮助。您是否尝试过在响应模板中过滤结果?非常感谢您的回复。我正在努力让它工作如果响应不是200,则返回一个错误。Else返回过滤后的数据**#if($ctx.result.statusCode==200)#foreach($ctx.result.body中的项)#if($item.product.productCode==“B362”)$util.qr($restlist.add($item))#end#end#end$util.toJson($util.qr($resMap.put(“result”,$resultList)))#els$utils.appendError($ctx.result.body,$ctx.result.result.statusCode))#结束我总是得到完整的列表返回。对不起,我错过了返回声明。我已经更新了我的答案。很高兴能帮助你!
{
"result" :
[
{"item" : "ItemC", "price" : 9},
{"item" : "ItemD", "price" : 8}
]
}