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

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

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

или это

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

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

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

PS: В Спецификации GraphQL

If no value is provided for a defined input object field and that field definition provides a default value, the default value should be used. If no default value is provided and the input object field’s type is non‐null, an error should be thrown. Otherwise, if the field is not required, then no entry is added to the coerced unordered map.

Я создал проблему в официальном репозитории AWS AppSync github.com/aws/aws-appsync-community/issues/59

Yves M. 07.10.2019 19:03
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
10
1
3 525
1

Ответы 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)),
}

Да, я уже использую значение по умолчанию на уровне распознавателя (использую Lambda вместо шаблонов скорости). Но меня это не устраивает, потому что я устанавливаю значение по умолчанию непосредственно в схеме arg: Int = 20 и не хочу дублировать определения как в схеме, так и в преобразователе. Я ожидал, что значение по умолчанию будет установлено и управляться непосредственно в AppSync .. не в преобразователе

Yves M. 12.07.2018 16:04

Ты прав. Это известная проблема, которая будет исправлена ​​в будущем.

mparis 13.07.2018 10:52

@mparis есть какие-либо обновления по этому поводу, поскольку кажется, что это все еще не работает, как предполагалось в спецификациях?

Stefan Fabian 25.12.2018 13:59

Вопрос: Если лимит передается как аргумент graphQL, то что помешает потребителю API запрашивать данные с лимитом «1000000»? Разве это не противоречит цели разбивки на страницы API?

bryanbraun 29.07.2020 00:26

Если вы подождете еще 6 лет, по слухам, команда AppSync исправит это.

EralpB 15.09.2020 17:32

Другие вопросы по теме