Amazon web services 如何配置Appsync从HTTP端点检索数据以填充列表?

Amazon web services 如何配置Appsync从HTTP端点检索数据以填充列表?,amazon-web-services,graphql,aws-api-gateway,aws-appsync,vtl,Amazon Web Services,Graphql,Aws Api Gateway,Aws Appsync,Vtl,我有两个http端点设置: GET /users/{userId} GET /users/{userId}/notes/{noteId} GET用户返回一个有效负载,其中包括多个noteIds的列表,可用于向GET Note端点发出多个请求 我试图将Appsync配置为能够在一个查询中获取所有这些数据,但无法使用对象填充列表 模式: type Query { getUser(userId: String!): User getNote(userId: String!, noteId:

我有两个http端点设置:

GET /users/{userId}
GET /users/{userId}/notes/{noteId}
GET用户返回一个有效负载,其中包括多个
noteId
s的列表,可用于向GET Note端点发出多个请求

我试图将Appsync配置为能够在一个查询中获取所有这些数据,但无法使用对象填充列表

模式:

type Query {
  getUser(userId: String!): User
  getNote(userId: String!, noteId: String!): Note
}

type User {
  userId: ID!
  firstName: String!
  lastName: String!
  notes: [Note]
}

type Note {
  noteId: ID!
  noteText: String!
  createdDatetime: Int!
}
我为每个端点都设置了一个数据源,我有一个用于
getUser
getNote
的解析器-我还有一个用于
User.notes
的解析器,它与
getNote
相同。这些解析器具有以下响应映射:

#if($ctx.error)
  $util.error($ctx.error.message, $ctx.error.type)
#end
#if($ctx.result.statusCode == 200)
    $ctx.result.body
#else
    $utils.appendError($ctx.result.body, "$ctx.result.statusCode")
#end
GET Note(包括
User.Note
field resolver)端点的我的解析器如下所示:

{
    "version": "2018-05-29",
    "method": "GET",
    "resourcePath": $util.toJson("/prod/users/$ctx.args.userId/notes/$ctx.args.noteId"),
    "params":{
        "headers":{
            "Content-Type": "application/json",
        }
    }
}
我可以从日志中看到,Appsync尝试运行GET Note解析器,但资源路径似乎没有填充任何ID?(我可以在端点上的自定义授权器中看到这一点,它注销了方法ARN,其中仍然包括
$ctx.args…


感觉这是一个常见的用例,但我在任何地方都找不到解决方案或示例。我的方法正确吗,或者我需要其他解决方案吗?

我认为第一个问题是您的
用户。注意
解析程序以及如何访问
用户ID
注释ID
。当您有字段解析程序时,应该使用
ctx.source
以访问父字段。例如,您应该在
User.notes
字段解析程序中使用
ctx.source.userId

其次,当您要从
getNote
HTTP端点获取单个注释时,当使用
BatchInvoke
通过AWS Lambda代理时,AppSync支持这种类型的行为。请参阅链接上的“高级用例:批处理”以获得更好的想法。此外,我认为这与您的用例相关


另一种可能是使用另一个HTTP端点同时获取所有用户的笔记,但我不确定这在您的情况下是否可行。

我可以知道您是如何从
getUser
调用
getNote
的吗?嗨@Myz,我的问题中没有提到这一点-我现在已经更新了它。我有一个字段解析器,指向相同的映射这是getNote解析器。感谢@Myz的回答。我以前没有考虑过使用Lambda解析器,但我认为这是正确的方法。新的HTTP端点似乎与我使用graphql(将微服务与前端逻辑分离)的理由背道而驰。