AWS AppSync FriendsList的用户关系

时间:2018-03-27 17:00:02

标签: amazon-web-services amazon-dynamodb graphql apollo aws-appsync

我的AWS AppSync和ApolloClient存在问题。 如何在名为AppSync的Amazon Service中使用用户之间的关联,即作为节点和边缘的连接。我想要做的是当我关注用户时,我希望通过一个请求看到所有用户的流量。 这是我想要的要求。我如何为此构建一个结构?

query {
    getFeeds(id:"myUserId") {
    following {
      userFeed {
        id
        ImageDataUrl
        textData
        date
      }
    }
  }
}

我创建的架构如下

type Comments {
    id: ID!
    date: Int!
    message: String!
    user: User
}
type Feed {
    id: ID!
    user: User!
    date: Int!
    textData: String
    ImageDataUrl: String
    VideoDataUrl: String
    likes: Like
    comments: [Comments]
}

#Objects
type Like {
    id: ID!
    number: Int!
    likers: [User]
}
}
type Query {
    getAllUsers(limit: Int): [User]
}

type User {
    id: ID!
    name: String!
    email: String!
    imageUrl: String!
    imageThumbUrl: String!
    followers: [User]
    following: [User]
    userFeed: [Feed]
}

schema {
    query: Query
}

1 个答案:

答案 0 :(得分:4)

今天可以在AppSync中使用。

要实现此目的,您可以向名为getUser的架构添加查询字段(getUser在这种情况下比getFeeds更有意义)并且它将有一个解析器来检索来自数据源的用户对象。

type Query {
    getAllUsers(limit: Int): [User]
    getUser(id:ID!): User
}

然后,您还可以在User.followingUser.userFeed字段中添加解析器。 User.following解析程序将查询您的数据源并检索有人关注的用户。 User.userFeed解析程序将查询您的数据源以检索用户订阅源列表。

这两个解析器(User.followingUser.userFeed)都应在解析器的请求映射模板中使用$context.source。此变量将包含getUser解析程序的结果。请求映射模板的工作是创建数据源理解的查询。

可能附加到User.following的示例请求映射模板可能类似于以下内容。它将查询名为“Following”的表,该表的主分区键为id(用户的id):

{
    "version" : "2017-02-28",
    "operation" : "Query",
    "query" : {
        ## Provide a query expression. **
        "expression": "id = :id",
        "expressionValues" : {
            ":id" : {
                ## Use the result of getUser to populate the query parameter **
                "S" : "${ctx.source.id}"
            }
        }
    }
}

您必须为User.userFeed解析器做类似的事情。

完成所有设置后,您可以运行以下查询,并且会发生以下情况:

query {
    getUser(id:"myUserId") {
    following {
      userFeed {
        id
        ImageDataUrl
        textData
        date
      }
    }
  }
}
  1. getUser解析器将首先运行。它将查询您的用户数据源并检索用户。
  2. User.following解析器将运行。它将使用它的父字段解析器(getUser)的结果来查询数据源以供跟踪。
  3. User.userFeed解析器将运行。它将使用它的父字段解析器(getUser)的结果来查询用户订阅源数据。