如何在AppSync GraphQL模式中使用自定义输入类型?
我正在试验AppSync+DynamoDB。我希望在GraphQL架构中具有以下类型:如何在AppSync GraphQL模式中使用自定义输入类型?,graphql,amazon-dynamodb,aws-appsync,Graphql,Amazon Dynamodb,Aws Appsync,我正在试验AppSync+DynamoDB。我希望在GraphQL架构中具有以下类型: type User { user_id: String! } type Box { name: String! user: User! } 如何在DynamoDB中创建一个表来存储指向另一个表的项(在我的例子中,我希望表BoxTable的user字段作为表UserTable中用户的引用) 我如何在AppSync中定义上述模式?当我将用户:用户!设置为GraphQL输入类型时,我得
type User {
user_id: String!
}
type Box {
name: String!
user: User!
}
如何在DynamoDB中创建一个表来存储指向另一个表的项(在我的例子中,我希望表BoxTable
的user
字段作为表UserTable
中用户的引用)
我如何在AppSync中定义上述模式?当我将
用户:用户!
设置为GraphQL输入类型时,我得到了错误预期用户。
?根据我对您问题的理解,这些是我的答案
如何在DynamoDB中创建一个表来存储指向另一个表的项
DynamoDB不是关系数据库,不提供外键或表联接。因此,要实现您在文章中提到的功能,您仍然需要调用DynamoDB两次才能获取框的所有信息,即首先从BoxTable
获取Box
项,然后从user
获取项mUserTable
基于user\u id
。如果您的用例是先获得user
,那么您可以使用过滤器byuser\u id
获得框
现在转到你文章的第二部分
如何在AppSync中定义上述模式
使用DynamoDB单元解析器,您可以对单个表进行查询(在DynamoDB批处理操作之外,但这些操作是为批量用例保留的)
实现这一点的一种方法是定义您的模式,该模式应该如下所示
type User {
user_id: String!
}
type Box {
name: String!
user: User!
}
input BoxInput {
name: String!
user: UserInput!
}
input UserInput {
user_id: String!
}
type Mutation {
createBox(input: BoxInput): Box
}
type Query {
getBox(input: BoxInput): Box
}
这就是运行查询和变异的方式
mutation createBox {
createBox(input: {
name: "abc"
user: { user_id: "1234-abcd-5678-efgh"}
}){
name
user { user_id }
}
}
query getBox {
getBox(input: {
name: "abc"
user: { user_id: "1234-abcd-5678-efgh"}
}){
name
user { user_id }
}
}
因此,请注意上面的查询和变异。这些查询和变异将显示user
为null,除非您在框中为user
type附加了单独的解析程序。例如:
Query that returns Box --> Resolver
type Box {
name
user --> Attach resolver to get user_id from your UserTable
}
另一种方法是使用管道解析程序,您可以在其中创建多个函数,每个函数都可以使用上一个函数的结果并查询数据库。这些函数按照您指定的顺序运行。例如:
Query that returns Box --> Resolver
type Box {
name
user --> Attach resolver to get user_id from your UserTable
}
从BoxTable
获取Box
的函数
使用user\u id
fromctx.prev.result
从UserTable
获取user
的函数
最后,根据模式中的Box
类型,将上述两个结果合并为一个JSON对象