В ноябре прошлого года 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

изменить флаг transformerversionfeature в 1