验证 AppSync 解析器模板中的数组输入

Validating array input in AppSync Resolver Template

我在我的 aws app-sync 中有一个查询:

input TestingInput {
    user_ids: [String]!
}

现在,我需要在这里做 2 种不同的验证:

  1. 验证 user_ids 是一个字符串数组。
  2. 验证数据库中是否存在所有 user_ids。

对于1,我可以使用$util.isList(),但是无法验证not是否为空串。有什么方法可以过滤掉数组中的空字符串,然后检查数组的长度吗?
对于 2,目前还不知道

  1. Velocity 脚本可以访问一些 Java API。在这种情况下,它们是 lists, and strings. However, I'm not sure what Java version AppSync supports. From AWS documentation, it's being linked to Java SE 6。回到你的问题,它是通过有一个新列表,并在其中添加非空 ids 来完成的。

    #set( $nonEmptyUserIds = [] )
    #foreach( $userId in $userIds )
      #set( $trimmedUserId = $userId.trim() )
      #if( $trimmedUserId.length() != 0 )
        $util.qr( $nonEmptyUserIds.add($trimmedUserId) )
      #end
    #end
    
  2. 由于它是针对您的数据库的检查,因此您需要一个用于解析器的数据源,以及一个用于请求映射的数据库查询。如果您的数据库是 RDS,那么您可以使用 SELECT。如果是 DyanmoDb,那么 BatchGetItem 是正确的选择。

在响应映射中,您应该有数据库结果来验证提交的用户 ID。