Использование существующего API AppSync с Amplify - PullRequest
0 голосов
/ 22 мая 2019

Использование: AppSync, DynamoDB и Lambda

Так что я немного застрял в том, как интегрировать AppSync в Amplify в React Native.У меня есть существующий API в AWS AppSync, который я создал на консоли.Этот API имеет несколько различных моделей, таких как: Пользователи, Видео, Видеокомментарии и т. Д. Некоторые объекты в этих моделях имеют настраиваемые шаблоны сопоставления и преобразователи, которые действительно важны для приложения.

Например, это быстрыйпосмотрим, какая у нас схема.

тип Пользователь {

userId: Id!

name: String

uploadedVideos (ограничение: Int, nextToken:Строка): VideoConnection

и т. Д.

}

тип Video {

videoID: Id!

объект: S3Object

userId: Id!

uploadedBy: Пользователь

}

У нас есть распознаватель, который запускается с простым запросом getVideo, который будет извлекать атрибут uploadedBy с помощью userIdи получает всю необходимую информацию об этом пользователе.

Кроме того, источники данных (таблицы DynamoDb), которые мы создали для моделей, имеют первичные ключи, а некоторые имеют ключи сортировки.Как и таблица VideoLikes, отслеживает, кому понравилось видео, и чтобы избежать дублирования, первичный ключ - это VideoID, а ключ сортировки - UserID.Это лишь небольшой пример, у нас есть другие места, где мы делаем это, чтобы также иметь доступ к БИС.

Когда я начал использовать Amplify, я попытался воссоздать API-интерфейс AppSync, потому что мне понравилось, насколько мощными были возможности CloudFormation сразличные постановочные среды.Тем не менее, я заметил, что DynamoDB для моделей были автоматически определены и им был автоматически установлен идентификатор в качестве первичного ключа.Мы используем БИС для сортировки по определенным значениям, например, для видео, если мы хотим отсортировать по количеству лайков или комментариев, поэтому, к сожалению, это не сработает для нас.Поэтому, когда я заметил это, я использовал команду «Codegen» из моего исходного API-интерфейса AppSync и столкнулся с проблемой, когда мои преобразователи и шаблоны сопоставления не были скопированы со схемой, запросами, мутациями и подписками, что приводило к сбоям большинства запросов, посколькуэти источники данных отсутствовали.

Итак, мой вопрос:

Есть ли способ интегрировать / использовать ВСЕ из моего существующего API AppSync в моем приложении React Native?Это включает в себя пользовательские распознаватели и шаблоны сопоставления.ЕСЛИ НЕ

Есть ли способ установить первичный ключ и ключ сортировки для DynamoDB Моделей при создании API непосредственно в CLI Amplify?ЕСЛИ НЕ

Есть ли другой способ эффективной сортировки данных в DynamoDB без использования LSI и GSI?Если модели автоматически генерируют таблицы с GSI, это может быть проблематично, потому что я знаю, что GSI немного дороже, поэтому я бы хотел как можно больше избегать их.Есть ли другой сервис, который будет сортировать данные, которые могут быть использованы в AppSync из DynamoDB?Любая помощь будет оценена, спасибо.

1 Ответ

0 голосов
/ 22 мая 2019

Есть ли способ интегрировать / использовать ВСЕ из моего существующего API AppSync в моем приложении React Native?

Да, вы можете развернуть свой API, как хотите, и затем использовать его, используяусилить клиентские инструменты.Вы всегда можете использовать функции Codegen Ampify CLI без развертывания API через категорию ampify api.Вы можете использовать пользовательские стеки для определения пользовательских распознавателей, которые не генерируются @model, но при этом будет развернут новый API с той же структурой, что и у существующего API.

Есть ли способ установить первичныйи сортировать ключ для DynamoDB Моделей при создании API непосредственно в Amplify CLI?

Скоро.Здесь есть RFC https://github.com/aws-amplify/amplify-cli/issues/1062, а реализация здесь в PR https://github.com/aws-amplify/amplify-cli/pull/1463.

Есть ли другой способ эффективной сортировки данных в DynamoDB без использования LSI и GSI?

Нет, но вы можете использовать перегрузку индекса, чтобы создать 1 хранилище индекса и отсортировать несколько различных концептуальных типов объектов.TBH это сложный предмет, но здесь хорошее место для начала https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-gsi-overloading.html.

...