如何为 AWS 放大 GraphQL API 添加服务器端业务逻辑?

Posted

技术标签:

【中文标题】如何为 AWS 放大 GraphQL API 添加服务器端业务逻辑?【英文标题】:How to add server side business logic for a AWS amplify GraphQL API? 【发布时间】:2021-09-11 03:21:04 【问题描述】:

可以在AWS docs > Designing your schema 上找到类似的以下架构。直到现在我才找到一个例子,其中只有状态为 PUBLISHED 的 ToDo 被 GraphQL API 公开。

type Todo 
  id: ID!
  name: String
  description: String
  status: TodoStatus


enum TodoStatus 
  DRAFT
  PUBLISHED
  DELETED

所有 AWS Amplify 指令都在 here 和 @auth 中进行了描述,其中可以定义 ToDo 模型的授权规则,但这不是我想要的。此外,我认为functions 在我的情况下也无济于事,还是我错了?

知道如何制作状态为 DRAFTDELETED 的 ToDo 项目无法通过 GraphAPI 访问(服务器端,而不是通过查询在前端)

这是否可能和使用 Django and Django Graphene 之类的工具一样简单?

【问题讨论】:

【参考方案1】:

似乎要走的路是custom resolver

解析器位于 API 端点和数据库之间。他们决定谁可以访问这些数据,他们正在寻找什么数据,以及他们获得了多少数据。

DynamoDB 解析器是用 Velocity 模板语言 (*.vtl) 编写的,这是一种许多开发人员可能不熟悉的语言,不幸的是 AWS 文档没有提供很多代码示例。

【讨论】:

这是一个很好的问题,我正在尝试自己寻找答案。但是这个答案违背了官方 GraphQL 建议,即拥有一个单独的业务逻辑层 (graphql.org/learn/authorization)。仍在寻找一个真实世界的 Amplify 示例。

以上是关于如何为 AWS 放大 GraphQL API 添加服务器端业务逻辑?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 ECS 添加带有应用程序负载均衡器的 AWS API 网关?

AWS放大获取所有者数据不仅是Id

将 AWS Cognito 添加到 Angular 应用程序

AWS 放大和 graphql - 外部数据库

AWS:如何为自定义域名配置 Cloudfront

AWS放大graphql突变:不能为不可为空的字段返回null