繁体   English   中英

如何在 AppSync GraphQL 架构中使用自定义输入类型?

[英]How to use custom input types in AppSync GraphQL schema?

我正在试验 AppSync + DynamoDB。 我想在我的 GraphQL Schema 中有以下类型:

type User {
    user_id: String!
}

type Box {
    name: String!
    user: User!

}

如何在 DynamoDB 中创建一个存储指向另一个表的项目的表(在我的情况下,我希望表BoxTable的字段user是对表UserTable中的用户的引用?

如何在 AppSync 中定义上述架构? 当我设置user: User! ,我收到错误Expected User. to be a GraphQL input type. Expected User. to be a GraphQL input type. ?

根据我对您问题的理解,这些是我的回答。

如何在 DynamoDB 中创建一个存储指向另一个表的项目的表

DynamoDB 不是关系数据库,不提供外键或表连接。 因此,要实现您在帖子中提到的内容,您仍然需要两次调用 DynamoDB 来获取Box的所有信息,即首先从BoxTable获取Box项目,然后根据user_idUserTable获取user 如果您的用例是您首先获得user ,那么您可以使用过滤器通过user_id获得Box

现在到你帖子的第二部分,

如何在 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,除非您在Box类型中附加一个带有user类型的单独解析器。 例如:

Query that returns Box --> Resolver

type Box {
    name
    user --> Attach resolver to get user_id from your UserTable
}

另一种方法是利用管道解析器,您可以在其中创建多个函数,每个函数都可以使用之前 function 的结果并查询数据库。 这些函数按照您指定的顺序运行。 例如:

  1. Function 从BoxTable获取Box
  2. Function 使用来自ctx.prev.resultuser_idUserTable获取user
  3. 最后,根据架构中的Box类型,将上述两个结果合并为一个 JSON object。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM