@connection 上的 AWS Amplify Graphql 查询

AWS Amplify Graphql query on @connection

我正在为 Graphql/AppSync 使用 AWS Amplify(使用 Cli 和 Angular 7 作为前端)并且想知道当它超过 10 个项目时如何获取所有连接的项目?

假设我创建了一个 schema.graphql 这样的:

type User @model {
  id: ID!
  firstname: String
  lastname: String
  project: Project @connection(name: "ProjectUsers")
}

type Project @model {
  id: ID!
  title: String
  task: String
  members: [User] @connection(name: "ProjectUsers")
}

当运行放大推送时,它会生成查询和变更。当 运行 使用项目 ID(来自生成的 API.service.ts 文件)查询 GetProject 时,它 returns 带有连接用户的项目项。但是如果项目有超过 10 个用户,它只会给我前 10 个用户和下一个令牌:

{
  id: "67b1fc0a-fd1f-4e8b-9bd7-b82b2aea5d3b",
  title: "Test",
  task: "test",
  members: {
    items: {
      0: {__typename: "User", id: "f245809a...}
      1: ...
      (2-8: ...)
      9: ...
      nextToken: "qwerj23r2kj....3223oop32kjo",
       __typename: "ModelUserConnection";
    }
  }
  __typename: "Project"
}

我可以看到多种解决方案,但不知道如何解决:

  1. 是否可以更改schema.grapql更改代码生成器,使其能够生成更改限制的能力,例如。 100 而不是标准的 10?

  2. 使用 nextToken 对结果进行分页,来自生成的 API.service.ts 文件?

  3. 更改 schema.graphql 文件,使生成的 ModelUserFilterInput 具有 userProjectId 字段(用于生成的 ListUsers 查询)?

或者是否有任何其他解决方案可以通过自动生成的文件 (API.service.ts) 中的查询获取项目的所有用户?

到目前为止,我能看到的唯一解决方案是首先 运行 ListUsers 查询(没有任何过滤器),然后遍历所有查询以检查它是否具有正确的项目 ID。但是,如果用户数据库很大,这可能会增长到大量数据并且非常慢,并且使用 @connection 的好处并不存在。

很抱歉post,我希望我已经充分解释了这个问题。

A) 更改您的查询

query {
  getProjet(id: "123") {
    id
    members(limit: 50) {
      items {
        firstname
      }
    }
 }

B) 附加解析器

AWS AppSync 控制台 中,架构部分的右端。按 UserConnection 过滤或类似查找 UserConnection.items 并单击 Attach

1) 数据源:UserTable0

2) 请求映射模板:ListItems

{
    "version" : "2017-02-28",
    "operation" : "Scan",
    "limit": $util.defaultIfNull(${ctx.args.limit}, 50),
    "nextToken": $util.toJson($util.defaultIfNullOrBlank($ctx.args.nextToken, null))
}

使用限制作为参数 ctx.args.limit 或者如果它为空则使用 50.

3) 响应映射模板

$util.toJson($ctx.result.items)

通过这样做,您可以更改基础 table 的方式 scanned/fetched。

C) 分页

另一种解决方案是在应用程序级别分页并保留 10 个项目的限制。

注意:我可能遗漏了其他解决方案。

更新:将此解决方案与 Amplify Console 一起使用。

现在,您可以在本地更新解析器并使用 Amplify CLI 将更新推送到您的帐户。这是它的工作原理。

创建 AWS AppSync API 后,您现在将在 API 文件夹的 Amplify 项目中创建一个名为 resolvers 的新空文件夹。要创建自定义解析器,请创建一个文件(即 Query.getTodo.req.vtl) 在您的 API 项目的 解析器目录 中。下次您 运行 放大推送或放大 api gql-compile 时,将使用您的解析器模板而不是自动生成的模板。您可以类似地创建一个 Query.getTodo.res.vtl 文件来更改解析器响应映射模板的行为。

<amplify-app>
    |_ amplify
      |_ .config
      |_ #current-cloud-backend
      |_ backend
        |_ api
          |_ resolvers
             Query.getProject.req.vtl
             Query.getProject.res.vtl
      team-provider-info.json

More details, 11 Feb 2019