Приложение AWS App Sync использует динамический распознаватель с выражением begin_with в ключе сортировки - PullRequest
0 голосов
/ 30 сентября 2018

Я пытаюсь получить список домашних животных, который принадлежит определенному имени пользователя.

Таблица дизайна (PetTable):

username: partition key
petId: sort key, 

Значение petIdгенерируется путем объединения строки "petId:" и случайного значения autoId.Так, если autoId равно 3838380022, тогда значение ключа сортировки petId будет равно «petId: 3838380022»

Схема:

type Pet {
    username: String!
    petId: ID!
}

type PetsConnection {
    pets: [Pet]
}

type Query {
    getPets(username: String): PetsConnection
}

Resolver:

{
    "version" : "2017-02-28",
    "operation" : "Query",
    "query" : {
        ## Provide a query expression. **
        "expression": "username = :username and begins_with(petId, :petId)",
        "expressionValues" : {
            ":username" : {
                "S" : "${ctx.args.username}"
            },
            ":petId" : {
                "S" : "pet"
            }

        }
    }
}

Запрос:

query GetUserPets {
  getPets(username: "test") {
    pets {
      petId
    }
  }
}

Ответ на запрос:

{
  "data": {
    "getPets": {
      "pets": null
    }
  }
}

В Dynamodb,У меня есть 2 объекта, где petId (SortKey) начинается с текста «pet». enter image description here

Ожидается, что запрос должен вернуть 2 записи, но ничего не возвращает.Не уверен, где ошибка.Любая помощь будет оценена.Спасибо.

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Каков ваш шаблон отображения ответов?Вы, вероятно, оставили шаблон отображения по умолчанию, который возвращает список результатов, вместо отображения результатов запроса из DynamoDB на ваш тип PetConnection.

Я воспроизвел ваш API и смог получить результаты, используя тот же GraphQL.запрос.

Вот мой шаблон ответа :

#set($petConnection = { 'pets': $ctx.result.items })
$util.toJson($petConnection)

И результаты:

{
  "data": {
    "getPets": {
      "pets": [
        {
          "petId": "petId:1234"
        },
        {
          "petId": "petId:12345"
        }
      ]
    }
  }
}

Примечание : один отличный способотладка вашего приложения - это включение журналов со страницы настроек API.Смотрите ниже, как включить логи.После включения перейдите на панель «Запросы», установите флажок «Журналы» и выполните запрос GraphQL.Журналы вашего приложения должны появиться прямо в консоли.enter image description here

0 голосов
/ 01 октября 2018

Я попытался воспроизвести вашу схему и максимально протестировать ее.Это прекрасно работает для меня

type Pet {
    username: String!
    petID: ID!
}

type Query {
    getPets(username: String!): [Pet]
}

schema {
    query: Query
}

Убедитесь, что при создании ресурса для PetTable (имя пользователя - PK и petID - sort-key)

enter image description here

Прикрепить распознаватель для запроса

enter image description here

DynamoDB

enter image description here

Результат тестирования

enter image description here

...