Как передать аргументы GraphQL по умолчанию в резолвер AWS AppSync

AWS AppSync позволяет определять значения по умолчанию в такой схеме.

type Foo {
  bar(
    arg: Int = 20
  ): Bar!
}

или это

type Foo {
  bar(
    arg: Int! = 20
  ): Bar!
}

Но в любом случае, когда значение не определено явно, значение по умолчанию не передается преобразователю.

Есть ли что-то, на что я должен согласиться, чтобы активировать значение по умолчанию, которое нужно передать? Это ошибка AWS? Если да, есть ли обходной путь?

PS: в спецификациях GraphQL

Если для определенного поля входного объекта не указано значение и это определение поля предоставляет значение по умолчанию, следует использовать значение по умолчанию. Если значение по умолчанию не указано и тип поля объекта ввода не равен нулю, должна быть выдана ошибка. В противном случае, если поле не требуется, то никакая запись не добавляется к принудительно неупорядоченной карте.


person Yves M.    schedule 12.07.2018    source источник
comment
Я создал проблему в официальном репозитории AWS AppSync github.com/aws/ aws-appsync-community / issues / 59   -  person Yves M.    schedule 07.10.2019


Ответы (1)


Аргументы по умолчанию в настоящее время являются известной проблемой, и лучший способ обойти их - использовать вспомогательную функцию скорости $util.defaultIfNull(). Например, вы можете использовать аргументы по умолчанию для limit и next token, делая что-то вроде этого:

{
  "version": "2017-02-28",
  "operation": "Scan",
  "limit": $util.defaultIfNull($ctx.args.first, 20),
  "nextToken": $util.toJson($util.defaultIfNullOrEmpty($ctx.args.after, null)),
}
person mparis    schedule 12.07.2018
comment
Да, я уже использую значение по умолчанию на уровне распознавателя (использую Lambda вместо шаблонов скорости). Но меня это не устраивает, потому что я устанавливаю значение по умолчанию непосредственно в схеме arg: Int = 20 и не хочу дублировать определения как в схеме, так и в преобразователе. Я ожидал, что значение по умолчанию будет установлено и управляться непосредственно в AppSync .. не в преобразователе - person Yves M.; 12.07.2018
comment
Ты прав. Это известная проблема, которая будет исправлена ​​в будущем. - person mparis; 13.07.2018
comment
@mparis есть какие-либо обновления по этому поводу, поскольку кажется, что это все еще не работает, как предполагалось в спецификациях? - person Stefan Fabian; 25.12.2018
comment
Вопрос: Если лимит передается как аргумент graphQL, то что помешает потребителю API запрашивать данные с лимитом 1000000? Разве это не противоречит цели разбивки на страницы API? - person bryanbraun; 29.07.2020
comment
Если вы подождете еще 6 лет, по слухам, команда AppSync исправит это. - person EralpB; 15.09.2020