当前位置: 首页 > 知识库问答 >
问题:

AWS放大器和GraphQL接口

殳自怡
2023-03-14

在使用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,我就会在查询上得到单独的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

共有2个答案

冯永长
2023-03-14

我认为您可以将公共字段保存在User中,将额外的信息保存在单独的类型中。不确定这是否是最佳实践,但它应该适用于此场景

enum UserType {
  ACTIVE
  INVITED
}

type User @model @key(name:"byTeam", fields:["teamID"]){
  id: ID!
  teamID: ID!
  email: String
  created: AWSTimestamp
  type: UserType
  activeUserInfo: ActiveUserInfo @connection(fields:["id"])
  invitedUserInfo: InvitedUserInfo @connection(fields:["id"])

}

type ActiveUserInfo @key(fields:["userID"]){
  userID: ID!
  first: String
  last: String
}

type InvitedUserInfo @key(fields:["userID"]){
  userID: ID!
  invitedBy: String
}

type Team @model {
  id:ID!
  users: [User!] @connection(keyName:"byTeam", fields:["id"])
}
西门安歌
2023-03-14

您只需使用@connection将两个数据库链接在一起(必须由类型而不是接口创建),因此如果您不想这样做,只需去掉@connection,团队数据库的用户类型将仅为[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,您可以使用布尔值区分活动用户,查询用户数据库时,它也会从团队数据库返回团队项目(我猜您需要其他字段,如团队名称等?),因此,当您创建团队对象时,您将传入teamUserId(下面未显示,但在使用amplify时创建),该ID将允许您将新创建的团队附加到现有用户或用户组。

 类似资料:
  • 我在另一个人推送的AWS AppSync上有一个GraphQL API,我想连接到它并在我的Android应用程序中获取数据。根据AWS文档,要将API与我的应用程序集成,我应该执行以下3个命令: 之后,我需要基于graphql模式生成Java类。我执行,但收到错误“未配置AppSync API。请添加API”。如果执行,我会得到“您的项目中已经有一个AppSync api。请使用“放大更新api

  • 我一直在尝试使用AWS Amplify来生成GraphQLAPI和后端。我可以使用引导模式创建创建一个工作后端。我选择了Todo示例。我可以从Android Studio内置的应用程序中调用它。查询和突变工作正常。每当我使用Android Studio查看模式时。graphql在放大/backend/api/project/(其中project是项目的名称)中,我在尝试重新定义Todo和使用未声明

  • 以下是AWS Amplify GraphQL客户端的官方文档:https://aws-amplify.github.io/amplify-js/media/api_guide.html.本节提供了基本输入的示例。 对于AWS Mobile Appsync SDK For Javascript,这里有一个详细的文档:https://docs.aws.amazon.com/appsync/latest

  • 我正在尝试使用 graphql 将数据插入/更改为动态,请参阅下图在插入数据时出错。如果在创建架构或更改数据时存在错误,我会感到困惑。该表是使用放大创建的 这是模式脚本

  • Apollo AWS Lambda with GraphQL subscriptions ⚠️ This documentation is currently for 1.0.0-alpha.X package which supports only subscriptions-transport-ws and drops the legacy protocol and client suppor

  • 当通过Amplify CLI初始化新的GraphQL后端时,示例模式使用@Model注释定义多个类型。比如说... 推送时,将创建多个DynamoDB表(每个模型一个)。因此在本例中,创建了三个单独的DynamoDB表(blog、post和Comments) 在我们的例子中,我们有一个模型,我们将有20个左右的小集合与用户关联。当感觉这些小集合都属于单个表中的用户对象时,我对不得不管理20个不同的