首页 > 解决方案 > AWS Amplify 和 GraphQL 接口

问题描述

您将如何处理接口并将它们用于使用 AWS Amplify 模型转换的数据模型中的连接?

interface User @model {
  id: ID
  email: String
  created: AWSTimestamp
}

type ActiveUser implements User {
  id: ID
  first: String
  last: String
  email: String
  created: AWSTimestamp
}

type InvitedUser implements User {
  id: ID
  email: String
  created: AWSTimestamp
  invitedBy: String
}

type Team @model {
  users: [User] @connection
}

似乎我的选择是将@model放在类型上,但是一旦运行 amplify update api,我就会在 Query 上获得单独的 Dynamo 表和查询。

转换器能否支持此处记录的接口:https ://docs.aws.amazon.com/appsync/latest/devguide/interfaces-and-unions.html

我还找到了一些支持票,但想知道是否有任何东西可以启用此功能。以下是我找到的支持票:

https://github.com/aws-amplify/amplify-cli/issues/1037

https://github.com/aws-amplify/amplify-cli/issues/202

标签: interfacegraphqlaws-amplifyaws-appsync

解决方案


您仅用于@connection将两个数据库链接在一起(必须由type而不是interface),所以如果您不想这样做,那么只需摆脱@connection并且 Team 数据库将简单地让用户属于 [User] 类型。我不完全是你想要做的,但我会做类似的事情:

type User @model {
  id: ID
  first: String!
  last: String!
  email: String!
  created: AWSTimestamp
  isActive: boolean
  invitedBy: String
  team: Team @connection(name: "UserTeamLink")
}

type Team @model {
  users: [User!] @connection(name: "UserTeamLink")
}

创建新用户时需要字段 first、last 和 email 的地方,您可以用布尔值区分活动用户,当您查询 User 数据库时,它也会从 Team 数据库中返回 Team 项目(我是猜你想要其他字段,比如团队名称等?),所以当你创建一个 Team 对象时,你会传入 teamUserId(下面没有显示,但在使用放大时创建),这将允许你将新创建的 Team 附加到现有用户或用户组。


推荐阅读