AWS AppSync(GraphQL)-使用HTTP解析器时的Where/filter子句

AWS AppSync(GraphQL)-使用HTTP解析器时的Where/filter子句,graphql,aws-appsync,Graphql,Aws Appsync,在AWS AppSync中是否可以使用附加的where/filter子句查询HTTP解析器 例如,http解析器返回一个产品列表(所有行)。某些使用原因需要对结果进行筛选 榜样;如果价格

在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}
          ] 
}