AWS-Amplify API模块:如何使GraphQL字段唯一?

时间:2019-01-04 10:52:32

标签: graphql aws-appsync aws-amplify

AWS-Amplify提供了一些指令来构建GraphQL-API。但是我还没有找到如何确保字段唯一性的方法。

我想在GraphCool中做类似的事情:

type Tag @model @searchable {
  id: ID!
  label: String! @isUnique
}

这是一个AWS-Amplify特定问题。与通用GraphQL无关。这是关于如何使用AWS-Amplify的API模块执行此操作的非常具体的内容。 (https://aws-amplify.github.io/docs/js/api

2 个答案:

答案 0 :(得分:1)

嘿,谢谢你的提问。默认情况下,使用amplify-cli无法实现此操作,但您可以使用管道解析器和DynamoDB表上的额外索引来自己完成此操作。为此,请执行以下步骤:

  1. 在标签为哈希键的表上创建一个GSI。
  2. 在架构的Mutation.createTag字段上创建管道解析器。您可以通过将@model定义更改为Mutation.createTag来关闭自动生成的@model(mutations: { update: "updateTag", delete: "deleteTag" })突变。
  3. 创建一个名为LookupLabel的函数,该函数针对新的GSI Query发出一个label = $ctx.args.input.label。如果返回值,则用$util.error("Label is not unique")引发错误。如果未返回任何值,则继续。
  4. 创建一个名为CreateTag的函数,该函数针对Tag表发出一个PutItem
  5. 将这两个功能添加到管道解析器中。

您可以在https://docs.aws.amazon.com/appsync/latest/devguide/pipeline-resolvers.html上了解有关管道解析器的更多信息。

在撰写本文时,amplify尚不支持自定义和管道解析器,但您可以在https://github.com/aws-amplify/amplify-cli/issues/574上阅读有关此功能的更多信息,因为将来会支持该功能。目前,您可以在AWS AppSync控制台中手动添加解析程序,也可以通过自己的CloudFormation模板添加解析程序,该模板的目标是Amplify创建的API的ID。如果您在此处(https://github.com/aws-amplify/amplify-cli/issues)创建问题并将其标记为功能请求,这也将有所帮助,因为可以使用@unique指令将其自动化,但这需要进行计划。

谢谢

答案 1 :(得分:1)

我最终会对此进行测试,看看这是否有效,但您可以执行一些操作,例如将 id 重命名为字符串! 所以...

type Tag @model @key["id"] {
id: String!
}

或:

type Customer @model @key(fields: ["email"]) {
email: String!
username: String
}

第二个直接取自文档:https://docs.amplify.aws/cli/graphql-transformer/key#designing-data-models-using-key
文档最近更新了,希望能让大家更容易理解。