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



我有两个http端点设置:

GET /users/{userId}
GET /users/{userId}/notes/{noteId}

GET User返回一个有效负载,其中包括多个noteId的列表,可用于向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!
}

我为每个端点都设置了一个数据源,我有一个getUsergetNote的解析器——我还有一个与getNote相同的User.notes的解析器。这些解析器具有以下响应映射:

#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字段解析器(端点的解析器如下所示:

{
"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?(我可以在端点上的自定义Authorizer中看到这一点,它注销了仍然包括$ctx.args...的方法ARN

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

我认为第一个问题是User.notes解析器以及如何访问userIdnoteId。当您有字段解析器时,您应该使用ctx.source来访问父字段[Ref.]。例如,您应该在User.notes字段解析器中使用ctx.source.userId

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

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

相关内容

  • 没有找到相关文章

最新更新