模型字段上的 AWS Amplify AppSync @function

AWS Amplify AppSync @function on a model field

我正在为看起来像这样的博客创建一个 Amplify 架构:

 type Post @model {
   id: ID!
   caption: String!
   src: String!
 }

我想在Post模型中添加一个新字段来计算Post[=27的次数=] 被喜欢。 它从另一个 API 获取此数据。

有没有办法 运行 仅在 模型字段上创建一个函数 类似这样的东西。

 type Post @model {
   id: ID!
   caption: String!
   src: String!
   likes: String @function("getLikesLambda-${dev}")
 }

getLikesLambda 代码看起来如何? 我在官方文档中看到了有关实现解析器的代码,但它们都将 @function 与 type query 相关联,这并不是我想要的。

如果你们有任何建议或有任何不清楚的地方,请告诉我。

您的解析器可以附加到任何字段,而不仅仅是查询根

我已经实现了类似的东西

在您的 graphQL 架构上:

  likes: String @function(name: "getLikesLambda-${env}")

添加一个新的 lambda 函数调用 amplify function add

然后编写您的代码,这里是一个 Python 示例,但您可以使用任何支持的语言。

import boto3

def handler(event, context):
  print('received event:')
  print(event)

  if 'typeName' in event and event['typeName'] == 'Post' and event['fieldName'] == 'likes':
    print("Resolve field likes")
    # Do your logic to get the likes
    likes = getLikes()
    return likes

  return ''

@danielfranca 完全正确。我还没有测试过它,但我最近在这里找到了一些我以前从未见过的文档:https://docs.amplify.aws/cli/graphql-transformer/directives。这里有一个函数示例:

type Query {
    posts: [Post] @function(name: "GraphQLResolverFunction")
}
type Post {
    id: ID!
    title: String!
    comments: [Comment] @function(name: "GraphQLResolverFunction")
}
type Comment {
    postId: ID!
    content: String
}