Appsync DynamodB не возвращает первичный ключ раздела - PullRequest
0 голосов
/ 13 сентября 2018

Заранее спасибо, поскольку это, вероятно, вопрос 101 - я нигде не могу найти ответ.

Я настроил простой пример AppSync и DynamoDB.

В DynamoDB у меня есть таблица categorys с элементами вида

{
  slug: String!,
  nm: String,
  nmTrail: String,
  ...
}

Итак - нет id поля. slug является основным ключом раздела, не нулевым и должен быть уникальным (уникальным в данных, которые я загружал до сих пор).

Я настроил упрощенную схему AppSync в соответствии с приведенным выше определением и распознаватель ...

{
  "version": "2017-02-28",
  "operation" : "GetItem",
  "key" : {
    "slug" : { "S" : "${context.arguments.slug}" }
  }
}

Запрос, такой как

query GoGetOne {
  getCategory(slug: "Wine") {
    nm
  }
}

Работает нормально - возвращает значение nm для правильного элемента в categorys - аналогично, я могу добавить любые другие свойства в categorys, чтобы вернуть их (например, nmTrail), кроме slug.

Если я добавлю slug (первичный ключ раздела, необнуляемая строка) в набор результатов, тогда я получу DynamoDB:AmazonDynamoDBException из the provided key element does not match the schema (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException.

Если я сканирую / запрашиваю / фильтрую таблицу в DynamoDB, все в порядке.

Большинство примеров AWS используют поле id: ID! в примерах 'get one' и также запрашивают его как возвращаемый элемент.

update1 в ответ на запрос KDs

Моя схема обновления мутаций:

type Mutation {
  putCategory(
    slug: String!,
    nm: String,
    nmTrail: String,
    mainCategorySlug: String,
    mainCategoryNm: String,
    parentCategorySlug: String,
    parentCategoryNm: String
  ): Category
}

Нет связывателя, связанного с этим и (очевидно), поэтому еще не использовал мутацию для put чего-либо еще - просто пытался get пакетно загружать данные для начала.

/ update1

Чего мне не хватает?

1 Ответ

0 голосов
/ 13 сентября 2018

Я пытался воспроизвести ваш API столько, сколько мог, и он работает для меня.

Категория таблицы DynamoDB

enter image description here

Схема:

type Query {
    getCategory(slug: String!): Category
}
type Category {
    slug: String
    nm: String
    nmTrail: String
}

Resolver on Query.getCategory шаблон запроса:

{
    "version": "2017-02-28",
    "operation": "GetItem",
    "key": {
        "slug": $util.dynamodb.toDynamoDBJson($ctx.args.slug),
    }
}

Resolver on Query.getCategory шаблон ответа:

$util.toJson($ctx.result)

Запрос:

query GoGetOne {
  getCategory(slug: "Wine") {
    slug
    nm
  }
}

Результаты

{
  "data": {
    "getCategory": {
      "slug": "Wine",
      "nm": "Wine1-nm"
    }
  }
}
...