В ноябре прошлого года AWS Amplify анонсировала GraphQL Transformer версии 2. Теперь причина, по которой я привожу это сегодня, заключается в том, что в настоящее время разработчики-самоучки учатся в основном из учебных пособий, и поэтому им очень сложно идти в ногу с последними изменениями, которые появляются в последних версиях, и это похоже на GraphQL Transformer. .
Что такое Amplify GraphQL Transformer?
Amplify GraphQL Transform — это набор библиотек, предназначенных для упрощения процесса разработки, развертывания и обслуживания API-интерфейсов на AWS. С его помощью вы определяете свой API с помощью языка определения схемы GraphQL (SDL), а затем передаете его в эту библиотеку, где он расширяется и преобразуется в полностью описательный шаблон облачного формирования, который реализует модель данных вашего API.
Отображение отношений/изменения соединения:
В версии 1 отношения или соединения мы используем только @connection
, который заменяется несколькими новыми директивами в версии 2.
@hasOne
создает отношение «один к одному» с целевой моделью.@hasMany
создает отношение "один ко многим" с целевой моделью.@belongsTo
облегчает двустороннюю связь между двумя моделями. Например, используйте директиву@belongsTo
в целевой модели@hasMany
-отношения, чтобы создать отношение обратно к исходной модели.@manyToMany
создает новую кардинальность отношений для GraphQL Transformer от Amplify.
Пример версии 1
type User @model @auth(rules: [{allow: public}]) { id: ID! username: String! address: String! email: String! phone_number: String! } type Vehicle @model @auth(rules: [{allow: public}]) { id: ID! type: String! latitude: Float, longitude: Float, isActive: Boolean heading: Float, userId: ID! user: User @connection(fields: ["userId"]) }
Этот пример показывает нам, как Vehicle Schema связана со схемой User директивой @connection
, что, на мой взгляд, является ребячеством, поскольку в нем нет основ кардинальности.
Пример версии 2
type User @model @auth(rules: [{ allow: public }]) { id: ID! username: String! address: String! image: String name: String email: String! given_name: String! phone_number: String! } type Vehicle @model @auth(rules: [{ allow: public }]) { id: ID! type: String! latitude: Float longitude: Float isActive: Boolean heading: Float userId: ID! user: User @hasOne(fields: ["userId"]) }
Теперь в этом примере мы использовали трансформатор v2, и, как вы, вероятно, можете видеть, в соединении двух таблиц есть зрелость, где теперь мы заменили директиву @connection
директивой @hasOne
, чтобы указать, что одно транспортное средство должно быть назначено одному пользователю.
Заключение
Лучше всегда работать с последними обновленными версиями, поскольку они поставляются с новыми или обновленными инструментами. Однако, если вы обновите интерфейс командной строки Amplify и по-прежнему хотите использовать Amplify GraphQL Transformer v1, перейдите на страницу ;
Расширить папку в вашем проекте › бэкэнд › cli.json
изменить флаг transformerversion
feature в 1