如何使用GraphQL创建/更新嵌套数据?

时间:2018-05-31 12:40:54

标签: graphql aws-appsync

我正在使用AWS AppSync尝试我的第一个GraphQL后端。我只想弄清楚如何使用一对多关联。我期望将许多相关对象作为子项列表接收,并且能够在创建新用户时编写其中一些子项。

type User {
    id: ID!
    name: String!
    records: [Records!]!
}
type Records {
    id: ID!
    userId: ID!
    title: String!
    ... etc ...
}

使用AppSync界面,我点击Create Resources一次制作一个记录表,然后再次在DynamoDB中创建一个Users表。这也会自动为我的架构添加突变,订阅,输入类型和更多类型,并为我创建解析器。

创建与我的User对象关联的Record对象的变异的语法是什么?如何在创建用户时输入记录数据?

如果需要,我可以包含更多AppSync自动生成的模式。

1 个答案:

答案 0 :(得分:3)

由于您使用的是两个DynamoDB表(用户和记录),因此您需要在CreateUser突变期间进行两次DynamoDB调用。在单个突变中进行两次DynamoDB调用的一种方法是利用DynamoDB的 BatchPutItem 操作。

要使用BatchPutItem,您需要修改附加到CreateUser变异的解析器。解析器负责获取graphQL请求,将其转换为DynamoDB操作,然后将DynamoDB操作的结果转换为graphQL响应。解析器有两个组件:请求映射模板和响应映射模板。

请求映射模板将负责获取变异参数并将其转换为DynamoDB BatchPutItem请求。

解析器的响应映射模板将负责将DynamoDB BatchPutItem操作的结果转换为您的变体的返回类型/结构。

以下是如何在解析器中使用多表BatchPutItem的教程:https://docs.aws.amazon.com/appsync/latest/devguide/tutorial-dynamodb-batch.html

以下是使用解析器所需的模板语言的编程指南:https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-programming-guide.html