Amazon dynamodb AppSync:嵌套类型解析程序

Amazon dynamodb AppSync:嵌套类型解析程序,amazon-dynamodb,graphql,velocity,aws-appsync,Amazon Dynamodb,Graphql,Velocity,Aws Appsync,我尝试包括以下graphql模式中定义的嵌套类型: type User { id: String! posts: [Post] } type Post { id: String! } type Query { getUser(id: String!): User getPost(id: String!): Post } 正如您所看到的,一个用户有多篇文章。我将AppSync与(包含用户和帖子相关行)一起用作数据源。在AppSync中,我必须使用一个请求映射模板,但在阅读

我尝试包括以下graphql模式中定义的嵌套类型:

type User {
  id: String!
  posts: [Post]
}

type Post {
  id: String!
}

type Query {
  getUser(id: String!): User
  getPost(id: String!): Post
}
正如您所看到的,一个用户有多篇文章。我将AppSync与(包含用户和帖子相关行)一起用作数据源。在AppSync中,我必须使用一个请求映射模板,但在阅读文档之后,我还不明白嵌套类型是如何解析的

我可以想象,在查询
getUser
时,应该使用用户id调用后解析程序。如果是这样,我如何访问后解析程序中的父id?这就是
${context.source}
产生的地方吗

由于
getPost
查询解析器与getUser Post子级调用的Post解析器相同,我是否需要将一些逻辑与解析器的请求模板集成以处理这两种情况


举个例子真的很有帮助

您还必须为User.posts编写解析器。当您调用
Query.getUser
时,将调用它的解析器,如果您有User.posts的解析器,则将使用
${context.source}
中设置的第一个解析器的上下文调用它

不幸的是,我手头没有一个清晰的示例,但如果您使用CloudFormation,您最终会得到两个类似这样的解析器:

  UserResolver:
    Type: "AWS::AppSync::Resolver"
    DependsOn: Schema
    Properties:
      ApiId: !Ref YourApiId
      TypeName: Query
      FieldName: getUser
      DataSourceName: !Ref YourDataSource
      RequestMappingTemplate: # you already have this
      ResponseMappingTemplate: ...

  UserPostsResolver:
    Type: "AWS::AppSync::Resolver"
    DependsOn: Schema
    Properties:
      ApiId: !Ref YourApiId
      TypeName: User
      FieldName: posts
      DataSourceName: !Ref YourDataSource
      RequestMappingTemplate: |
        # use context.source.id here to reference the user id
      ResponseMappingTemplate: "$util.toJson($ctx.result.items)"

差不多就是这样。您的思路是正确的,但是从字段到解析程序的映射需要比您想象的更加明确。

这里是另一篇stackoverflow文章,我将详细介绍如何做到这一点。标题说的是突变,但它同时涉及了突变和查询

谢谢你。除了对包含父对象结果的上下文对象的模糊引用之外,我不可能在文档中找到它(我想我错过了它,因为没有这样的嵌套示例)。我现在意识到,我错误地假设解析器只在查询或变异类型中指定,而忽略了它们可以在任何地方指定,这是标准的graphQL。再次感谢!“很高兴这有帮助,”弗朗西斯厄普顿说。我发现这些文档也有点难以导航,我们也花了一段时间才弄明白如何导航。@macbutch我不知道。我可以将其用于手动放大和编辑JSON模板吗?(注意我使用的不是DynamoDB,而是RDS)。非常感谢。如果帖子是分页的呢?Thanks@Ricardo可能已经太迟了,但我们没有使用Amplify,所以我不确定,但我不认为这会是一个问题。分页详细信息将根据您的后端在一定程度上有所不同,但我建议使用。我们在Dynamo中使用了一种连接类型,基本方法也应该适用于您(尽管我希望它看起来有点不同)。我一直在努力为同一个问题找到一个像样的答案,最后找到了Medium post,它很好地解释了如何在嵌套的JSON对象中检索数据。