Можно ли выполнить проверку ввода с помощью AWS AppSync без добавления еще одного «уровня» взаимодействия?
Я чувствую, что добавление лямбда-функции лишит ее цели.
Я хотел бы выполнить хотя бы некоторую проверку регулярного выражения для строк.
А если нет, то как это делают люди, использующие AppSync или аналогичные решения (firebase)?





Если это только проверка регулярного выражения без необходимости проверять ввод на соответствие данным в источнике данных, то вы можете добавить некоторую логику проверки в шаблон сопоставления запроса преобразователя.
См. Ниже пример проверки соответствия поля ввода электронному письму от myvaliddomain.com. Если это не подтвердится, мы просто прервем и выдадим ошибку в поле.
#set($valid = $util.matches("^[a-zA-Z0-9_.+-]+@(?:(?:[a-zA-Z0-9-]+\.)?[a-zA-Z]+\.)?(myvaliddomain)\.com", $ctx.args.input))
#if (!$valid)
$util.error("$ctx.args.input is not a valid email.", "ValidationError")
#end
## Rest of your request mapping template below
Поскольку теперь вам нужно подключить несколько источников данных к одному полю GraphQL, вы можете использовать конвейерный преобразователь. Ваш преобразователь конвейера будет состоять из двух функций: первая функция будет извлекать шаблон регулярного выражения из, скажем, DynamoDB с помощью операции GetItem и выполнять проверку внутри шаблона сопоставления ответов, а вторая функция фактически запускает другую операцию, только если первая функция завершается успешно. . Ознакомьтесь с docs.aws.amazon.com/appsync/latest/devguide/… для полного объяснения.
@SamuelE. Попробуйте использовать «шаблон оболочки», как описано в этой статье: hackernoon.com/…. Это сэкономит вам много избыточности в вашем коде.
Спасибо, это то, что я искал. Еще один вопрос, если вы не возражаете: поскольку первый аргумент
$util.matches- это строка, возможно ли получить этот шаблон Regex из самой базы данных?